X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Faction.c;h=df3037daba95f377a55dad17152bdf24ff70b437;hb=b76ec18d1c8857cf32598c822364298fc535c84e;hp=1ff4a6cdbf0780a907fdcecf445ed3c94bb10280;hpb=de2ba8f28b85422e645c94cfdf5791cce3321264;p=chaz%2Fopenbox diff --git a/openbox/action.c b/openbox/action.c index 1ff4a6cd..df3037da 100644 --- a/openbox/action.c +++ b/openbox/action.c @@ -1248,59 +1248,6 @@ void action_debug(union ActionData *data) void action_execute(union ActionData *data) { - GError *e = NULL; - gchar *cmd, **argv = 0; - if (data->execute.path) { - cmd = g_filename_from_utf8(data->execute.path, -1, NULL, NULL, NULL); - if (cmd) { - /* If there is a keyboard grab going on then we need to cancel - it so the application can grab things */ - event_cancel_all_key_grabs(); - - if (!g_shell_parse_argv (cmd, NULL, &argv, &e)) { - g_message(_("Failed to execute '%s': %s"), - cmd, e->message); - g_error_free(e); - } else if (data->execute.startupnotify) { - gchar *program; - - program = g_path_get_basename(argv[0]); - /* sets up the environment */ - sn_setup_spawn_environment(program, - data->execute.name, - data->execute.icon_name, - /* launch it on the current - desktop */ - screen_desktop, - data->execute.any.time); - if (!g_spawn_async(NULL, argv, NULL, G_SPAWN_SEARCH_PATH | - G_SPAWN_DO_NOT_REAP_CHILD, - NULL, NULL, NULL, &e)) { - g_message(_("Failed to execute '%s': %s"), - cmd, e->message); - g_error_free(e); - sn_spawn_cancel(); - } - unsetenv("DESKTOP_STARTUP_ID"); - g_free(program); - g_strfreev(argv); - } else { - if (!g_spawn_async(NULL, argv, NULL, G_SPAWN_SEARCH_PATH | - G_SPAWN_DO_NOT_REAP_CHILD, - NULL, NULL, NULL, &e)) - { - g_message(_("Failed to execute '%s': %s"), - cmd, e->message); - g_error_free(e); - } - g_strfreev(argv); - } - g_free(cmd); - } else { - g_message(_("Failed to convert the path '%s' from utf8"), - data->execute.path); - } - } } void action_activate(union ActionData *data) @@ -1368,7 +1315,7 @@ void action_raiselower(union ActionData *data) ObClient *c = data->client.any.c; client_action_start(data); - stacking_restack_request(c, NULL, Opposite, FALSE); + stacking_restack_request(c, NULL, Opposite); client_action_end(data, config_focus_under_mouse); } @@ -1462,8 +1409,8 @@ void action_move_to_center(union ActionData *data) Rect *area; area = screen_area(c->desktop, client_monitor(c), NULL); client_action_start(data); - client_move(c, area->width / 2 - c->area.width / 2, - area->height / 2 - c->area.height / 2); + client_move(c, area->x + area->width / 2 - c->area.width / 2, + area->y + area->height / 2 - c->area.height / 2); client_action_end(data, FALSE); g_free(area); } @@ -2056,26 +2003,41 @@ void action_add_desktop(union ActionData *data) void action_remove_desktop(union ActionData *data) { + guint rmdesktop, movedesktop; + GList *it, *stacking_copy; + if (screen_num_desktops < 2) return; client_action_start(data); - /* move all the clients over */ - if (data->addremovedesktop.current) { - GList *it, *stacking_copy; - - /* make a copy of the list cuz we're changing it */ - stacking_copy = g_list_copy(stacking_list); - for (it = g_list_last(stacking_copy); it; it = g_list_previous(it)) { - if (WINDOW_IS_CLIENT(it->data)) { - ObClient *c = it->data; - if (c->desktop != DESKTOP_ALL && c->desktop > screen_desktop) - client_set_desktop(c, c->desktop - 1, TRUE, TRUE); - /* raise all the windows that are on the current desktop which - is being merged */ - else if (c->desktop == DESKTOP_ALL || - c->desktop == screen_desktop) - stacking_raise(CLIENT_AS_WINDOW(c)); + /* what desktop are we removing and moving to? */ + if (data->addremovedesktop.current) + rmdesktop = screen_desktop; + else + rmdesktop = screen_num_desktops - 1; + if (rmdesktop < screen_num_desktops - 1) + movedesktop = rmdesktop + 1; + else + movedesktop = rmdesktop; + + /* make a copy of the list cuz we're changing it */ + stacking_copy = g_list_copy(stacking_list); + for (it = g_list_last(stacking_copy); it; it = g_list_previous(it)) { + if (WINDOW_IS_CLIENT(it->data)) { + ObClient *c = it->data; + guint d = c->desktop; + if (d != DESKTOP_ALL && d >= movedesktop) { + client_set_desktop(c, c->desktop - 1, TRUE, TRUE); + ob_debug("moving window %s\n", c->title); + } + /* raise all the windows that are on the current desktop which + is being merged */ + if ((screen_desktop == rmdesktop - 1 || + screen_desktop == rmdesktop) && + (d == DESKTOP_ALL || d == screen_desktop)) + { + stacking_raise(CLIENT_AS_WINDOW(c)); + ob_debug("raising window %s\n", c->title); } } }