SOURCES: libwnck-compiz.patch (NEW) - some patches from davidr
wolf
wolf at pld-linux.org
Mon Apr 24 20:49:47 CEST 2006
Author: wolf Date: Mon Apr 24 18:49:47 2006 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- some patches from davidr
---- Files affected:
SOURCES:
libwnck-compiz.patch (NONE -> 1.1) (NEW)
---- Diffs:
================================================================
Index: SOURCES/libwnck-compiz.patch
diff -u /dev/null SOURCES/libwnck-compiz.patch:1.1
--- /dev/null Mon Apr 24 20:49:47 2006
+++ SOURCES/libwnck-compiz.patch Mon Apr 24 20:49:42 2006
@@ -0,0 +1,783 @@
+
+*** libwnck-2.14.0-window-move-1.patch ***
+
+diff -ur ../libwnck-2.14.0/libwnck/pager.c ./libwnck/pager.c
+--- ../libwnck-2.14.0/libwnck/pager.c 2006-03-06 19:58:22.000000000 +0100
++++ ./libwnck/pager.c 2006-03-16 16:49:19.000000000 +0100
+@@ -1262,12 +1262,45 @@
+
+ if (space)
+ {
++ gboolean new_on_workspace;
++ int dx, dy;
++
++ new_on_workspace =
++ !wnck_window_is_on_workspace (pager->priv->drag_window, space);
++
+ if (wnck_window_get_workspace (pager->priv->drag_window) != space)
+ pager->priv->action_window = pager->priv->drag_window;
+
+ wnck_window_move_to_workspace (pager->priv->drag_window,
+ space);
+- if (space == wnck_screen_get_active_workspace (pager->priv->screen))
++
++ dx = pager->priv->drag_window_x - pager->priv->drag_start_x;
++ dy = pager->priv->drag_window_y - pager->priv->drag_start_y;
++
++ if (dx || dy)
++ {
++ double width_ratio, height_ratio;
++ int x, y;
++ GdkRectangle rect;
++
++ get_workspace_rect (pager, i, &rect);
++
++ wnck_window_get_geometry (pager->priv->drag_window,
++ &x, &y, NULL, NULL);
++
++ width_ratio = (double) rect.width /
++ wnck_workspace_get_width (space);
++ height_ratio = (double) rect.height /
++ wnck_workspace_get_height (space);
++
++ x += dx / width_ratio;
++ y += dy / height_ratio;
++
++ wnck_window_move (pager->priv->drag_window, x, y);
++ }
++
++ if (new_on_workspace &&
++ space == wnck_screen_get_active_workspace (pager->priv->screen))
+ wnck_window_activate (pager->priv->drag_window, event->time);
+ }
+ }
+Only in ./libwnck: pager.c.orig
+Only in ./libwnck: pager.c.rej
+diff -ur ../libwnck-2.14.0/libwnck/window.c ./libwnck/window.c
+--- ../libwnck-2.14.0/libwnck/window.c 2006-02-11 09:29:51.000000000 +0100
++++ ./libwnck/window.c 2006-03-16 16:44:49.000000000 +0100
+@@ -1105,6 +1105,20 @@
+ window->priv->xwindow);
+ }
+
++void
++wnck_window_move (WnckWindow *window, int x, int y)
++{
++ g_return_if_fail (WNCK_IS_WINDOW (window));
++
++ _wnck_move_resize (WNCK_SCREEN_XSCREEN (window->priv->screen),
++ window->priv->xwindow,
++ TRUE,
++ FALSE,
++ x, y,
++ 0, 0);
++}
++
++
+ /**
+ * wnck_window_get_workspace:
+ * @window: a #WnckWindow
+Only in ./libwnck: window.c.orig
+diff -ur ../libwnck-2.14.0/libwnck/window.h ./libwnck/window.h
+--- ../libwnck-2.14.0/libwnck/window.h 2006-01-21 20:52:50.000000000 +0100
++++ ./libwnck/window.h 2006-03-16 16:44:49.000000000 +0100
+@@ -193,6 +193,7 @@
+ void wnck_window_unstick (WnckWindow *window);
+ void wnck_window_keyboard_move (WnckWindow *window);
+ void wnck_window_keyboard_size (WnckWindow *window);
++void wnck_window_move (WnckWindow *window, int x, int y);
+
+ WnckWorkspace* wnck_window_get_workspace (WnckWindow *window);
+ void wnck_window_move_to_workspace (WnckWindow *window,
+Only in ./libwnck: window.h.orig
+diff -ur ../libwnck-2.14.0/libwnck/xutils.c ./libwnck/xutils.c
+--- ../libwnck-2.14.0/libwnck/xutils.c 2006-01-04 00:06:53.000000000 +0100
++++ ./libwnck/xutils.c 2006-03-16 16:44:49.000000000 +0100
+@@ -919,6 +919,38 @@
+ }
+
+ void
++_wnck_move_resize (Screen *screen,
++ Window xwindow,
++ gboolean move,
++ gboolean resize,
++ int x,
++ int y,
++ unsigned int width,
++ unsigned int height)
++{
++ XEvent xev;
++
++ xev.xclient.type = ClientMessage;
++ xev.xclient.serial = 0;
++ xev.xclient.send_event = True;
++ xev.xclient.display = gdk_display;
++ xev.xclient.window = xwindow;
++ xev.xclient.message_type = _wnck_atom_get ("_NET_MOVERESIZE_WINDOW");
++ xev.xclient.format = 32;
++ xev.xclient.data.l[0] = ((move) ? 3 << 7 : 0) | ((resize) ? 3 << 9 : 0);
++ xev.xclient.data.l[1] = x;
++ xev.xclient.data.l[2] = y;
++ xev.xclient.data.l[3] = width;
++ xev.xclient.data.l[4] = height;
++
++ XSendEvent (gdk_display,
++ RootWindowOfScreen (screen),
++ False,
++ SubstructureRedirectMask | SubstructureNotifyMask,
++ &xev);
++}
++
++void
+ _wnck_change_state (Screen *screen,
+ Window xwindow,
+ gboolean add,
+diff -ur ../libwnck-2.14.0/libwnck/xutils.h ./libwnck/xutils.h
+--- ../libwnck-2.14.0/libwnck/xutils.h 2005-06-16 19:32:36.000000000 +0200
++++ ./libwnck/xutils.h 2006-03-16 16:44:49.000000000 +0100
+@@ -126,6 +126,15 @@
+ void _wnck_keyboard_size (Screen *screen,
+ Window xwindow);
+
++void _wnck_move_resize (Screen *screen,
++ Window xwindow,
++ gboolean move,
++ gboolean resize,
++ int x,
++ int y,
++ unsigned int width,
++ unsigned int height);
++
+ void _wnck_toggle_showing_desktop (Screen *screen,
+ gboolean show);
+
+
+*** libwnck-above-1.patch ***
+
+Index: libwnck/window.c
+===================================================================
+RCS file: /cvs/gnome/libwnck/libwnck/window.c,v
+retrieving revision 1.64
+diff -u -r1.64 window.c
+--- libwnck/window.c 28 Mar 2006 21:49:20 -0000 1.64
++++ libwnck/window.c 6 Apr 2006 09:38:00 -0000
+@@ -2081,6 +2081,12 @@
+ window->priv->actions |=
+ WNCK_WINDOW_ACTION_MAXIMIZE |
+ WNCK_WINDOW_ACTION_UNMAXIMIZE;
++
++ /* There's no _NET_WM_ACTION_ABOVE hint so always add it if
++ window manager claims to support_NET_WM_STATE_ABOVE */
++ if (wnck_screen_net_wm_supports (wnck_window_get_screen (window),
++ "_NET_WM_STATE_ABOVE"))
++ window->priv->actions |= WNCK_WINDOW_ACTION_ABOVE;
+ }
+
+ static void
+
+*** libwnck-opacity-2.patch ***
+
+--- libwnck/window-action-menu.c 18 Feb 2006 16:29:29 -0000 1.20
++++ libwnck/window-action-menu.c 19 Apr 2006 17:02:49 -0000
+@@ -36,6 +36,7 @@
+ ABOVE,
+ MOVE,
+ RESIZE,
++ CHANGE_OPACITY,
+ PIN,
+ LEFT,
+ RIGHT,
+@@ -55,6 +56,7 @@
+ GtkWidget *above_item;
+ GtkWidget *move_item;
+ GtkWidget *resize_item;
++ GtkWidget *opacity_item;
+ GtkWidget *close_item;
+ GtkWidget *workspace_separator;
+ GtkWidget *pin_item;
+@@ -115,7 +117,7 @@
+ {
+ ActionMenuData *amd = get_data (G_OBJECT (menu_item));
+ WindowAction action = GPOINTER_TO_INT (data);
+-
++
+ if (amd == NULL)
+ return;
+
+@@ -151,6 +153,15 @@
+ case RESIZE:
+ wnck_window_keyboard_size (amd->window);
+ break;
++ case CHANGE_OPACITY: {
++ int opacity_value;
++
++ opacity_value =
++ GPOINTER_TO_INT (g_object_get_data (G_OBJECT (menu_item),
++ "opacity"));
++
++ wnck_window_set_opacity (amd->window, opacity_value);
++ } break;
+ case PIN:
+ if (wnck_window_is_pinned (amd->window))
+ wnck_window_unpin (amd->window);
+@@ -578,6 +589,47 @@
+
+ set_item_text (amd->resize_item, _("_Resize"));
+ set_item_stock (amd->move_item, NULL);
++
++ if (wnck_screen_net_wm_supports (wnck_window_get_screen (amd->window),
++ "_NET_WM_WINDOW_OPACITY"))
++ {
++ guint present_opacity;
++ gint j;
++
++ amd->opacity_item = gtk_menu_item_new_with_mnemonic (_("_Opacity"));
++ gtk_widget_show (amd->opacity_item);
++
++ submenu = gtk_menu_new ();
++ gtk_menu_item_set_submenu (GTK_MENU_ITEM (amd->opacity_item),
++ submenu);
++
++ gtk_menu_shell_append (GTK_MENU_SHELL (menu), amd->opacity_item);
++
++ present_opacity = wnck_window_get_opacity (window);
++ for (j = 0; j < 4; j++)
++ {
++ GtkWidget *item;
++ gchar *label;
++ guint o;
++
++ label = g_strdup_printf ("%d%%", (j + 1) * 25);
++
++ item = make_menu_item (amd, CHANGE_OPACITY);
++
++ o = (j + 1) * 25;
++ g_object_set_data (G_OBJECT (item), "opacity", GINT_TO_POINTER (o));
++
++ if (o == present_opacity)
++ 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);
++ }
++ }
+
+ separator = gtk_separator_menu_item_new ();
+ gtk_widget_show (separator);
+--- libwnck/window.c 28 Mar 2006 21:49:20 -0000 1.64
++++ libwnck/window.c 19 Apr 2006 17:02:50 -0000
+@@ -88,6 +88,8 @@
+
+ char *res_class;
+ char *res_name;
++
++ guint32 opacity;
+
+ /* true if transient_for points to root window,
+ * not another app window
+@@ -133,6 +135,7 @@
+ guint need_update_startup_id : 1;
+ guint need_update_wmclass : 1;
+ guint need_update_wmhints : 1;
++ guint need_update_opacity : 1;
+ };
+
+ enum {
+@@ -142,6 +145,7 @@
+ ICON_CHANGED,
+ ACTIONS_CHANGED,
+ GEOMETRY_CHANGED,
++ OPACITY_CHANGED,
+ LAST_SIGNAL
+ };
+
+@@ -170,6 +174,7 @@
+ static void update_transient_for (WnckWindow *window);
+ static void update_startup_id (WnckWindow *window);
+ static void update_wmclass (WnckWindow *window);
++static void update_opacity (WnckWindow *window);
+ static void unqueue_update (WnckWindow *window);
+ static void queue_update (WnckWindow *window);
+ static void force_update_now (WnckWindow *window);
+@@ -288,6 +293,15 @@
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
++
++ signals[OPACITY_CHANGED] =
++ g_signal_new ("opacity_changed",
++ G_OBJECT_CLASS_TYPE (object_class),
++ G_SIGNAL_RUN_LAST,
++ G_STRUCT_OFFSET (WnckWindowClass, opacity_changed),
++ NULL, NULL,
++ g_cclosure_marshal_VOID__VOID,
++ G_TYPE_NONE, 0);
+ }
+
+ static void
+@@ -416,6 +430,7 @@
+ window->priv->need_update_startup_id = TRUE;
+ window->priv->need_update_wmclass = TRUE;
+ window->priv->need_update_wmhints = TRUE;
++ window->priv->need_update_opacity = TRUE;
+ force_update_now (window);
+
+ return window;
+@@ -1520,6 +1535,29 @@
+ *heightp = window->priv->height;
+ }
+
++guint
++wnck_window_get_opacity (WnckWindow *window)
++{
++ guint64 o;
++
++ g_return_val_if_fail (WNCK_IS_WINDOW (window), 0);
++
++ o = ((guint64) window->priv->opacity * 1005) / G_MAXUINT32;
++
++ return o / 10;
++}
++
++void
++wnck_window_set_opacity (WnckWindow *window,
++ guint opacity)
++{
++ g_return_if_fail (WNCK_IS_WINDOW (window));
++
++ _wnck_change_opacity (WNCK_SCREEN_XSCREEN (window->priv->screen),
++ wnck_window_get_xid (window),
++ (((guint64) opacity * G_MAXUINT32) / 100));
++}
++
+ /**
+ * wnck_window_is_visible_on_workspace:
+ * @window: a #WnckWindow
+@@ -1742,6 +1780,13 @@
+ window->priv->need_update_wmhints = TRUE;
+ queue_update (window);
+ }
++ else if (xevent->xproperty.atom ==
++ _wnck_atom_get ("_NET_WM_WINDOW_OPACITY"))
++ {
++ window->priv->need_update_opacity = TRUE;
++ queue_update (window);
++ }
++
+ }
+
+ void
+@@ -2249,6 +2294,17 @@
+ }
+
+ static void
++update_opacity (WnckWindow *window)
++{
++ if (!window->priv->need_update_opacity)
++ return;
++
++ window->priv->need_update_opacity = FALSE;
++
++ window->priv->opacity = _wnck_get_opacity (window->priv->xwindow);
++}
++
++static void
+ force_update_now (WnckWindow *window)
+ {
+ WnckWindowState old_state;
+@@ -2312,6 +2368,7 @@
+ */
+ update_workspace (window); /* emits signals */
+ update_actions (window);
++ update_opacity (window);
+
+ get_icons (window);
+
+--- libwnck/window.h 21 Jan 2006 19:52:50 -0000 1.36
++++ libwnck/window.h 19 Apr 2006 17:02:50 -0000
+@@ -127,6 +127,9 @@
+
+ /* Changed size/position */
+ void (* geometry_changed) (WnckWindow *window);
++
++ /* Changed opacity */
++ void (* opacity_changed) (WnckWindow *window);
+ };
+
+ GType wnck_window_get_type (void) G_GNUC_CONST;
+@@ -230,6 +233,9 @@
+ int *yp,
+ int *widthp,
+ int *heightp);
++
++guint wnck_window_get_opacity (WnckWindow *window);
++void wnck_window_set_opacity (WnckWindow *window, guint opacity);
+
+ gboolean wnck_window_is_visible_on_workspace (WnckWindow *window,
+ WnckWorkspace *workspace);
+--- libwnck/xutils.c 25 Mar 2006 08:59:28 -0000 1.55
++++ libwnck/xutils.c 19 Apr 2006 17:02:50 -0000
+@@ -1089,6 +1089,33 @@
+ &xev);
+ }
+
++void
++_wnck_change_opacity (Screen *screen,
++ Window xwindow,
++ guint32 opacity)
++{
++ XEvent xev;
++
++ xev.xclient.type = ClientMessage;
++ xev.xclient.serial = 0;
++ xev.xclient.send_event = True;
++ xev.xclient.display = gdk_display;
++ xev.xclient.window = xwindow;
++ xev.xclient.message_type = _wnck_atom_get ("_NET_WM_WINDOW_OPACITY");
++ xev.xclient.format = 32;
++ xev.xclient.data.l[0] = opacity;
++ xev.xclient.data.l[1] = 0;
++ xev.xclient.data.l[2] = 0;
++ xev.xclient.data.l[3] = 0;
++ xev.xclient.data.l[4] = 0;
++
++ XSendEvent (gdk_display,
++ RootWindowOfScreen (screen),
++ False,
++ SubstructureRedirectMask | SubstructureNotifyMask,
++ &xev);
++}
++
+ char*
+ _wnck_get_session_id (Window xwindow)
+ {
+@@ -1207,6 +1234,19 @@
+
+ XFree (ch.res_class);
+ }
++}
++
++guint32
++_wnck_get_opacity (Window xwindow)
++{
++ int val;
++
++ if (_wnck_get_cardinal (xwindow,
++ _wnck_atom_get ("_NET_WM_WINDOW_OPACITY"),
++ &val))
++ return val;
++
++ return G_MAXUINT32;
+ }
+
+ void
+--- libwnck/xutils.h 16 Jun 2005 17:32:36 -0000 1.26
++++ libwnck/xutils.h 19 Apr 2006 17:02:50 -0000
+@@ -108,6 +108,9 @@
+ void _wnck_change_viewport (Screen *screen,
+ int x,
+ int y);
++void _wnck_change_opacity (Screen *screen,
++ Window xwindow,
++ guint32 opacity);
+
+ char* _wnck_get_session_id (Window xwindow);
+ int _wnck_get_pid (Window xwindow);
+@@ -116,6 +119,9 @@
+ void _wnck_get_wmclass (Window xwindow,
+ char **res_class,
+ char **res_name);
++
++guint32 _wnck_get_opacity (Window xwindow);
++
+
+ void _wnck_select_input (Window xwindow,
+ int mask);
+
+*** libwnck-viewport-1.patch ***
+
+diff -ur ../libwnck/libwnck/window-action-menu.c ./libwnck/window-action-menu.c
+--- ../libwnck/libwnck/window-action-menu.c 2006-02-18 17:29:29.000000000 +0100
++++ ./libwnck/window-action-menu.c 2006-04-19 18:36:37.000000000 +0200
+@@ -41,7 +41,13 @@
+ 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;
+@@ -63,6 +69,13 @@
+ 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;
+ };
+
+@@ -204,6 +217,71 @@
+ workspace_index));
+ break;
+ }
++ case STICK:
++ if (wnck_window_is_sticky (amd->window))
++ wnck_window_unstick (amd->window);
++ else
++ wnck_window_stick (amd->window);
++ break;
++ case VIEWPORT_LEFT:
++ {
++ 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;
++ }
++ case VIEWPORT_RIGHT:
++ {
++ 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;
++ }
++ case VIEWPORT_UP:
++ {
++ 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;
++ }
++ case VIEWPORT_DOWN:
++ {
++ 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;
++ }
++ case MOVE_TO_VIEWPORT:
++ {
++ WnckWorkspace *workspace;
++ int viewport_x, viewport_y, xw, yw, x, y;
++
++ workspace = wnck_window_get_workspace (amd->window);
++ 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"));
<<Diff was trimmed, longer than 597 lines>>
More information about the pld-cvs-commit
mailing list