2007-07-26 23:58:25 +00:00
|
|
|
Only in .: config.h
|
|
|
|
Only in .: config.log
|
|
|
|
Only in .: config.status
|
|
|
|
Only in ./doc: Makefile
|
|
|
|
Only in .: intltool-extract
|
|
|
|
Only in .: intltool-merge
|
|
|
|
Only in .: intltool-update
|
|
|
|
Only in .: libtool
|
|
|
|
Only in ./libwnck: application.lo
|
|
|
|
Only in ./libwnck: application.o
|
|
|
|
Only in ./libwnck: class-group.lo
|
|
|
|
Only in ./libwnck: class-group.o
|
|
|
|
Only in ./libwnck: .deps
|
|
|
|
Only in ./libwnck: .libs
|
|
|
|
Only in ./libwnck: libwnck-1.la
|
|
|
|
Only in ./libwnck: Makefile
|
|
|
|
Only in ./libwnck: pager-accessible-factory.lo
|
|
|
|
Only in ./libwnck: pager-accessible-factory.o
|
|
|
|
Only in ./libwnck: pager-accessible.lo
|
|
|
|
Only in ./libwnck: pager-accessible.o
|
|
|
|
Only in ./libwnck: pager.lo
|
|
|
|
Only in ./libwnck: pager.o
|
|
|
|
Only in ./libwnck: screen.lo
|
|
|
|
Only in ./libwnck: screen.o
|
|
|
|
Only in ./libwnck: selector.lo
|
|
|
|
Only in ./libwnck: selector.o
|
|
|
|
Only in ./libwnck: stamp-wnck-enum-types.h
|
|
|
|
Only in ./libwnck: stamp-wnck-marshal.h
|
|
|
|
Only in ./libwnck: tasklist.lo
|
|
|
|
Only in ./libwnck: tasklist.o
|
|
|
|
Only in ./libwnck: test-pager
|
|
|
|
Only in ./libwnck: test-pager.o
|
|
|
|
Only in ./libwnck: test-selector
|
|
|
|
Only in ./libwnck: test-selector.o
|
|
|
|
Only in ./libwnck: test-tasklist
|
|
|
|
Only in ./libwnck: test-tasklist.o
|
|
|
|
Only in ./libwnck: test-wnck
|
|
|
|
Only in ./libwnck: test-wnck.o
|
|
|
|
Only in ./libwnck: util.lo
|
|
|
|
Only in ./libwnck: util.o
|
|
|
|
Index: libwnck/window-action-menu.c
|
|
|
|
===================================================================
|
|
|
|
--- libwnck/window-action-menu.c.orig
|
|
|
|
+++ libwnck/window-action-menu.c
|
2007-08-02 15:26:04 +00:00
|
|
|
@@ -56,7 +56,13 @@ typedef enum
|
2007-07-26 23:58:25 +00:00
|
|
|
RIGHT,
|
|
|
|
UP,
|
|
|
|
DOWN,
|
|
|
|
- MOVE_TO_WORKSPACE
|
|
|
|
+ MOVE_TO_WORKSPACE,
|
|
|
|
+ STICK,
|
|
|
|
+ VIEWPORT_LEFT,
|
|
|
|
+ VIEWPORT_RIGHT,
|
|
|
|
+ VIEWPORT_UP,
|
|
|
|
+ VIEWPORT_DOWN,
|
|
|
|
+ MOVE_TO_VIEWPORT
|
|
|
|
} WindowAction;
|
|
|
|
|
|
|
|
typedef struct _ActionMenuData ActionMenuData;
|
2007-08-02 15:26:04 +00:00
|
|
|
@@ -80,6 +86,13 @@ struct _ActionMenuData
|
2007-07-26 23:58:25 +00:00
|
|
|
GtkWidget *up_item;
|
|
|
|
GtkWidget *down_item;
|
|
|
|
GtkWidget *workspace_item;
|
|
|
|
+ GtkWidget *viewport_separator;
|
|
|
|
+ GtkWidget *stick_item;
|
|
|
|
+ GtkWidget *viewport_left_item;
|
|
|
|
+ GtkWidget *viewport_right_item;
|
|
|
|
+ GtkWidget *viewport_up_item;
|
|
|
|
+ GtkWidget *viewport_down_item;
|
|
|
|
+ GtkWidget *viewport_item;
|
|
|
|
guint idle_handler;
|
|
|
|
};
|
|
|
|
|
2007-08-02 15:26:04 +00:00
|
|
|
@@ -331,8 +344,74 @@ item_activated_callback (GtkWidget *menu
|
|
|
|
ww, hw);
|
|
|
|
}
|
|
|
|
break;
|
2007-07-26 23:58:25 +00:00
|
|
|
+ case STICK:
|
2007-08-02 15:26:04 +00:00
|
|
|
+ if (wnck_window_is_sticky (amd->window))
|
|
|
|
+ wnck_window_unstick (amd->window);
|
|
|
|
+ else
|
|
|
|
+ wnck_window_stick (amd->window);
|
|
|
|
+ break;
|
2007-07-26 23:58:25 +00:00
|
|
|
+ case VIEWPORT_LEFT:
|
|
|
|
+ {
|
2007-08-02 15:26:04 +00:00
|
|
|
+ int width, xw, yw;
|
|
|
|
+
|
|
|
|
+ width = wnck_screen_get_width (wnck_window_get_screen (amd->window));
|
|
|
|
+ wnck_window_get_geometry (amd->window, &xw, &yw, NULL, NULL);
|
|
|
|
+ wnck_window_move (amd->window, xw - width, yw);
|
|
|
|
+ break;
|
2007-07-26 23:58:25 +00:00
|
|
|
+ }
|
|
|
|
+ case VIEWPORT_RIGHT:
|
|
|
|
+ {
|
2007-08-02 15:26:04 +00:00
|
|
|
+ int width, xw, yw;
|
|
|
|
+
|
|
|
|
+ width = wnck_screen_get_width (wnck_window_get_screen (amd->window));
|
|
|
|
+ wnck_window_get_geometry (amd->window, &xw, &yw, NULL, NULL);
|
|
|
|
+ wnck_window_move (amd->window, xw + width, yw);
|
|
|
|
+ break;
|
|
|
|
+ }
|
2007-07-26 23:58:25 +00:00
|
|
|
+ case VIEWPORT_UP:
|
|
|
|
+ {
|
2007-08-02 15:26:04 +00:00
|
|
|
+ int height, xw, yw;
|
|
|
|
+
|
|
|
|
+ height = wnck_screen_get_height (wnck_window_get_screen (amd->window));
|
|
|
|
+ wnck_window_get_geometry (amd->window, &xw, &yw, NULL, NULL);
|
|
|
|
+ wnck_window_move (amd->window, xw, yw - height);
|
|
|
|
+ break;
|
2007-07-26 23:58:25 +00:00
|
|
|
+ }
|
|
|
|
+ case VIEWPORT_DOWN:
|
|
|
|
+ {
|
2007-08-02 15:26:04 +00:00
|
|
|
+ int height, xw, yw;
|
|
|
|
+
|
|
|
|
+ height = wnck_screen_get_height (wnck_window_get_screen (amd->window));
|
|
|
|
+ wnck_window_get_geometry (amd->window, &xw, &yw, NULL, NULL);
|
|
|
|
+ wnck_window_move (amd->window, xw, yw + height);
|
|
|
|
+ break;
|
|
|
|
+ }
|
2007-07-26 23:58:25 +00:00
|
|
|
+ case MOVE_TO_VIEWPORT:
|
|
|
|
+ {
|
2007-08-02 15:26:04 +00:00
|
|
|
+ WnckWorkspace *workspace;
|
|
|
|
+ int viewport_x, viewport_y, xw, yw, x, y;
|
|
|
|
+
|
2007-07-26 23:58:25 +00:00
|
|
|
+ workspace = wnck_window_get_workspace (amd->window);
|
|
|
|
+ if (!workspace)
|
|
|
|
+ workspace = wnck_screen_get_workspace (wnck_window_get_screen (amd->window), 0);
|
2007-08-02 15:26:04 +00:00
|
|
|
+ viewport_x = wnck_workspace_get_viewport_x (workspace);
|
|
|
|
+ viewport_y = wnck_workspace_get_viewport_y (workspace);
|
|
|
|
+
|
|
|
|
+ x = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (menu_item), "x"));
|
|
|
|
+ y = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (menu_item), "y"));
|
|
|
|
+
|
|
|
|
+ wnck_window_get_geometry (amd->window, &xw, &yw, NULL, NULL);
|
|
|
|
+
|
|
|
|
+ if (wnck_window_is_sticky (amd->window))
|
|
|
|
+ wnck_window_unstick (amd->window);
|
|
|
|
+
|
|
|
|
+ wnck_window_move (amd->window,
|
|
|
|
+ xw + x - viewport_x,
|
|
|
|
+ yw + y - viewport_y);
|
|
|
|
+ break;
|
2007-07-26 23:58:25 +00:00
|
|
|
+ }
|
2007-08-02 15:26:04 +00:00
|
|
|
default:
|
|
|
|
- g_assert_not_reached ();
|
|
|
|
+ g_assert_not_reached ();
|
|
|
|
}
|
2007-07-26 23:58:25 +00:00
|
|
|
}
|
|
|
|
|
2007-08-02 15:26:04 +00:00
|
|
|
@@ -601,6 +680,58 @@ update_menu_state (ActionMenuData *amd)
|
|
|
|
gtk_menu_popdown (GTK_MENU (gtk_menu_item_get_submenu (GTK_MENU_ITEM (amd->workspace_item))));
|
2007-07-26 23:58:25 +00:00
|
|
|
}
|
2007-08-02 15:26:04 +00:00
|
|
|
|
|
|
|
+ if (wnck_window_is_sticky (amd->window))
|
|
|
|
+ {
|
|
|
|
+ set_item_text (amd->stick_item, _("_Only in This Viewport"));
|
|
|
|
+ set_item_stock (amd->stick_item, NULL);
|
|
|
|
+ gtk_widget_set_sensitive (amd->stick_item,
|
|
|
|
+ (actions & WNCK_WINDOW_ACTION_STICK) != 0);
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ set_item_text (amd->stick_item, _("_Always in Visible Viewport"));
|
|
|
|
+ set_item_stock (amd->stick_item, NULL);
|
|
|
|
+ gtk_widget_set_sensitive (amd->stick_item,
|
|
|
|
+ (actions & WNCK_WINDOW_ACTION_STICK) != 0);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (!wnck_window_is_sticky (amd->window))
|
|
|
|
+ {
|
|
|
|
+ if (amd->viewport_item)
|
|
|
|
+ gtk_widget_set_sensitive (amd->viewport_item,
|
|
|
|
+ (actions & WNCK_WINDOW_ACTION_MOVE) != 0);
|
|
|
|
+
|
|
|
|
+ if (amd->viewport_left_item)
|
|
|
|
+ gtk_widget_set_sensitive (amd->viewport_left_item,
|
|
|
|
+ (actions & WNCK_WINDOW_ACTION_MOVE) != 0);
|
|
|
|
+
|
|
|
|
+ if (amd->viewport_right_item)
|
|
|
|
+ gtk_widget_set_sensitive (amd->viewport_right_item,
|
|
|
|
+ (actions & WNCK_WINDOW_ACTION_MOVE) != 0);
|
|
|
|
+
|
|
|
|
+ if (amd->viewport_up_item)
|
|
|
|
+ gtk_widget_set_sensitive (amd->viewport_up_item,
|
|
|
|
+ (actions & WNCK_WINDOW_ACTION_MOVE) != 0);
|
|
|
|
+
|
|
|
|
+ if (amd->viewport_down_item)
|
|
|
|
+ gtk_widget_set_sensitive (amd->viewport_down_item,
|
|
|
|
+ (actions & WNCK_WINDOW_ACTION_MOVE) != 0);
|
|
|
|
+ }
|
|
|
|
+ if (wnck_workspace_is_virtual (wnck_screen_get_active_workspace (screen)))
|
|
|
|
+ {
|
|
|
|
+ gtk_widget_show (amd->viewport_separator);
|
|
|
|
+ gtk_widget_show (amd->stick_item);
|
|
|
|
+ gtk_widget_show (amd->viewport_item);
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ gtk_widget_hide (amd->viewport_separator);
|
|
|
|
+ gtk_widget_hide (amd->stick_item);
|
|
|
|
+ gtk_widget_hide (amd->viewport_item);
|
|
|
|
+ }
|
|
|
|
+
|
2007-07-26 23:58:25 +00:00
|
|
|
+
|
|
|
|
+
|
2007-08-02 15:26:04 +00:00
|
|
|
gtk_menu_reposition (GTK_MENU (amd->menu));
|
|
|
|
|
2007-07-26 23:58:25 +00:00
|
|
|
return FALSE;
|
2007-08-02 15:26:04 +00:00
|
|
|
@@ -970,6 +1101,12 @@ wnck_create_window_action_menu (WnckWind
|
|
|
|
GtkWidget *separator;
|
|
|
|
GSList *pin_group;
|
|
|
|
WnckScreen *screen;
|
|
|
|
+ WnckWorkspace *workspace;
|
|
|
|
+ int i;
|
|
|
|
+
|
2007-07-26 23:58:25 +00:00
|
|
|
+ int viewport_x, viewport_y, viewport_width, viewport_height;
|
|
|
|
+ int screen_width, screen_height;
|
|
|
|
+ int x, y;
|
|
|
|
|
|
|
|
g_return_val_if_fail (WNCK_IS_WINDOW (window), NULL);
|
2007-08-02 15:26:04 +00:00
|
|
|
|
|
|
|
@@ -1070,9 +1207,113 @@ wnck_create_window_action_menu (WnckWind
|
|
|
|
gtk_menu_shell_append (GTK_MENU_SHELL (menu),
|
|
|
|
amd->workspace_item);
|
2007-07-26 23:58:25 +00:00
|
|
|
|
|
|
|
- if (wnck_screen_net_wm_supports (wnck_window_get_screen (amd->window),
|
|
|
|
- "_NET_WM_WINDOW_OPACITY"))
|
|
|
|
- {
|
|
|
|
+ amd->viewport_separator = separator = gtk_separator_menu_item_new ();
|
|
|
|
+ gtk_widget_show (separator);
|
|
|
|
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu),
|
|
|
|
+ separator);
|
|
|
|
+
|
|
|
|
+ amd->stick_item = make_menu_item (amd, STICK);
|
|
|
|
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu),
|
|
|
|
+ amd->stick_item);
|
|
|
|
+ set_item_stock (amd->stick_item, NULL);
|
|
|
|
+
|
|
|
|
+ workspace = wnck_window_get_workspace (amd->window);
|
|
|
|
+ if (!workspace)
|
|
|
|
+ workspace = wnck_screen_get_workspace (wnck_window_get_screen (amd->window), 0);
|
|
|
|
+
|
|
|
|
+ viewport_x = wnck_workspace_get_viewport_x (workspace);
|
|
|
|
+ viewport_y = wnck_workspace_get_viewport_y (workspace);
|
|
|
|
+ viewport_width = wnck_workspace_get_width (workspace);
|
|
|
|
+ viewport_height = wnck_workspace_get_height (workspace);
|
|
|
|
+
|
|
|
|
+ screen_width = wnck_screen_get_width (wnck_window_get_screen (amd->window));
|
|
|
|
+ screen_height = wnck_screen_get_height (wnck_window_get_screen (amd->window));
|
|
|
|
+
|
|
|
|
+ if (!wnck_window_is_sticky (amd->window))
|
|
|
|
+ {
|
|
|
|
+ if (viewport_x >= screen_width)
|
|
|
|
+ {
|
|
|
|
+ amd->viewport_left_item = make_menu_item (amd, VIEWPORT_LEFT);
|
|
|
|
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu),
|
|
|
|
+ amd->viewport_left_item);
|
|
|
|
+ set_item_text (amd->viewport_left_item, _("Move to Viewport _Left"));
|
|
|
|
+ set_item_stock (amd->viewport_left_item, NULL);
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ amd->viewport_left_item = NULL;
|
|
|
|
+
|
|
|
|
+ if (viewport_x <= viewport_width - 2 * screen_width)
|
|
|
|
+ {
|
|
|
|
+ amd->viewport_right_item = make_menu_item (amd, VIEWPORT_RIGHT);
|
|
|
|
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu),
|
|
|
|
+ amd->viewport_right_item);
|
|
|
|
+ set_item_text (amd->viewport_right_item, _("Move to Viewport R_ight"));
|
|
|
|
+ set_item_stock (amd->viewport_right_item, NULL);
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ amd->viewport_right_item = NULL;
|
|
|
|
+
|
|
|
|
+ if (viewport_y >= screen_height)
|
|
|
|
+ {
|
|
|
|
+ amd->viewport_up_item = make_menu_item (amd, VIEWPORT_UP);
|
|
|
|
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu),
|
|
|
|
+ amd->viewport_up_item);
|
|
|
|
+ set_item_text (amd->viewport_up_item, _("Move to Viewport _Up"));
|
|
|
|
+ set_item_stock (amd->viewport_up_item, NULL);
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ amd->viewport_up_item = NULL;
|
|
|
|
+
|
|
|
|
+ if (viewport_y <= viewport_height - 2 * screen_height)
|
|
|
|
+ {
|
|
|
|
+ amd->viewport_down_item = make_menu_item (amd, VIEWPORT_DOWN);
|
|
|
|
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu),
|
|
|
|
+ amd->viewport_down_item);
|
|
|
|
+ set_item_text (amd->viewport_down_item, _("Move to Viewport _Down"));
|
|
|
|
+ set_item_stock (amd->viewport_down_item, NULL);
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ amd->viewport_down_item = NULL;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ amd->viewport_item = gtk_menu_item_new_with_mnemonic (_("Move to Another _Viewport"));
|
|
|
|
+ gtk_widget_show (amd->viewport_item);
|
|
|
|
+
|
|
|
|
+ submenu = gtk_menu_new ();
|
|
|
|
+ gtk_menu_item_set_submenu (GTK_MENU_ITEM (amd->viewport_item),
|
|
|
|
+ submenu);
|
|
|
|
+
|
|
|
|
+ i = 1;
|
|
|
|
+ for (y = 0; y < viewport_height; y += screen_height)
|
|
|
|
+ {
|
|
|
|
+ char *label;
|
|
|
|
+ GtkWidget *item;
|
|
|
|
+
|
|
|
|
+ for (x = 0; x < viewport_width; x += screen_width)
|
|
|
|
+ {
|
|
|
|
+ label = g_strdup_printf (_("Viewport _%d"), i++);
|
|
|
|
+
|
|
|
|
+ item = make_menu_item (amd, MOVE_TO_VIEWPORT);
|
|
|
|
+ g_object_set_data (G_OBJECT (item), "x", GINT_TO_POINTER (x));
|
|
|
|
+ g_object_set_data (G_OBJECT (item), "y", GINT_TO_POINTER (y));
|
|
|
|
+
|
|
|
|
+ if (x == viewport_x && y == viewport_y)
|
|
|
|
+ gtk_widget_set_sensitive (item, FALSE);
|
|
|
|
+
|
|
|
|
+ gtk_menu_shell_append (GTK_MENU_SHELL (submenu), item);
|
|
|
|
+ set_item_text (item, label);
|
|
|
|
+ set_item_stock (item, NULL);
|
|
|
|
+
|
|
|
|
+ g_free (label);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu),
|
|
|
|
+ amd->viewport_item);
|
|
|
|
+
|
|
|
|
+ if (wnck_screen_net_wm_supports (wnck_window_get_screen (amd->window),
|
|
|
|
+ "_NET_WM_WINDOW_OPACITY"))
|
|
|
|
+ {
|
|
|
|
guint present_opacity;
|
|
|
|
gint j;
|
|
|
|
|