rpms/libwnck/devel libwnck-2.19.2-appearance.patch, NONE, 1.1 libwnck-2.19.2-viewport.patch, NONE, 1.1 .cvsignore, 1.44, 1.45 libwnck.spec, 1.68, 1.69 sources, 1.44, 1.45 libwnck-2.18.0-appearance.patch, 1.1, NONE libwnck-2.18.0-viewport.patch, 1.1, NONE

Matthias Clasen (mclasen) fedora-extras-commits at redhat.com
Sun May 20 01:55:26 UTC 2007


Author: mclasen

Update of /cvs/pkgs/rpms/libwnck/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv18607

Modified Files:
	.cvsignore libwnck.spec sources 
Added Files:
	libwnck-2.19.2-appearance.patch libwnck-2.19.2-viewport.patch 
Removed Files:
	libwnck-2.18.0-appearance.patch libwnck-2.18.0-viewport.patch 
Log Message:
2.19.2


libwnck-2.19.2-appearance.patch:

--- NEW FILE libwnck-2.19.2-appearance.patch ---
--- libwnck-2.19.2/libwnck/xutils.h.appearance	2007-05-13 06:45:13.000000000 -0400
+++ libwnck-2.19.2/libwnck/xutils.h	2007-05-19 21:39:55.000000000 -0400
@@ -109,6 +109,16 @@ void _wnck_change_viewport (Screen *scre
 			    int     x,
 			    int     y);
 
+void _wnck_change_opacity (Screen  *screen,
+			   Window  xwindow,
+			   guint32 opacity);
+void _wnck_change_saturation (Screen  *screen,
+			   Window  xwindow,
+			   guint32 saturation);
+void _wnck_change_brightness (Screen  *screen,
+			   Window  xwindow,
+			   guint32 brightness);
+
 char*  _wnck_get_session_id     (Window xwindow);
 int    _wnck_get_pid            (Window xwindow);
 char*  _wnck_get_name           (Window xwindow);
@@ -117,6 +127,12 @@ void   _wnck_get_wmclass        (Window 
                                  char **res_class,
                                  char **res_name);
 
+guint32 _wnck_get_opacity (Window xwindow);
+
+guint32 _wnck_get_saturation (Window xwindow);
+
+guint32 _wnck_get_brightness (Window xwindow);
+
 void   _wnck_select_input     (Window xwindow,
                                int    mask);
 
--- libwnck-2.19.2/libwnck/xutils.c.appearance	2007-05-13 06:45:13.000000000 -0400
+++ libwnck-2.19.2/libwnck/xutils.c	2007-05-19 21:39:55.000000000 -0400
@@ -1091,6 +1091,87 @@ _wnck_toggle_showing_desktop (Screen  *s
 	      &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);
+}
+
+void
+_wnck_change_saturation (Screen  *screen,
+		      Window  xwindow,
+		      guint32 saturation)
+{
+  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_SATURATION");
+  xev.xclient.format = 32;
+  xev.xclient.data.l[0] = saturation;
+  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);
+}
+
+void
+_wnck_change_brightness (Screen  *screen,
+		      Window  xwindow,
+		      guint32 brightness)
+{
+  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_BRIGHTNESS");
+  xev.xclient.format = 32;
+  xev.xclient.data.l[0] = brightness;
+  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)
 {
@@ -1211,6 +1292,45 @@ _wnck_get_wmclass (Window xwindow,
     }
 }
 
+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;
+}
+
+guint32
+_wnck_get_saturation (Window xwindow)
+{
+  int val;
+
+  if (_wnck_get_cardinal (xwindow,
+			  _wnck_atom_get ("_NET_WM_WINDOW_SATURATION"),
+			  &val))
+      return val;
+
+  return G_MAXUINT32;
+}
+
+guint32
+_wnck_get_brightness (Window xwindow)
+{
+  int val;
+
+  if (_wnck_get_cardinal (xwindow,
+			  _wnck_atom_get ("_NET_WM_WINDOW_BRIGHTNESS"),
+			  &val))
+      return val;
+
+  return G_MAXUINT32;
+}
+
 void
 _wnck_select_input (Window xwindow,
                     int    mask)
--- libwnck-2.19.2/libwnck/window.c.appearance	2007-05-13 06:45:13.000000000 -0400
+++ libwnck-2.19.2/libwnck/window.c	2007-05-19 21:39:55.000000000 -0400
@@ -91,6 +91,10 @@ struct _WnckWindowPrivate
   char *res_class;
   char *res_name;
   
+  guint32 opacity;
+  guint32 saturation;
+  guint32 brightness;
+  
   /* true if transient_for points to root window,
    * not another app window
    */
@@ -134,6 +138,10 @@ struct _WnckWindowPrivate
   guint need_update_startup_id : 1;
   guint need_update_wmclass : 1;
   guint need_update_wmhints : 1;
+  
+  guint need_update_opacity : 1;
+  guint need_update_saturation : 1;
+  guint need_update_brightness : 1;
 
   guint need_emit_name_changed : 1;
   guint need_emit_icon_changed : 1;
@@ -146,6 +154,9 @@ enum {
   ICON_CHANGED,
   ACTIONS_CHANGED,
   GEOMETRY_CHANGED,
+  OPACITY_CHANGED,
+  SATURATION_CHANGED,
+  BRIGHTNESS_CHANGED,
   LAST_SIGNAL
 };
 
@@ -174,6 +185,9 @@ static void update_wintype   (WnckWindow
 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 update_saturation   (WnckWindow *window);
+static void update_brightness   (WnckWindow *window);
 static void unqueue_update   (WnckWindow *window);
 static void queue_update     (WnckWindow *window);
 static void force_update_now (WnckWindow *window);
@@ -293,6 +307,33 @@ wnck_window_class_init (WnckWindowClass 
                   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);  
+
+  signals[SATURATION_CHANGED] =
+    g_signal_new ("saturation_changed",
+                  G_OBJECT_CLASS_TYPE (object_class),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (WnckWindowClass, saturation_changed),
+                  NULL, NULL,
+                  g_cclosure_marshal_VOID__VOID,
+                  G_TYPE_NONE, 0);
+
+  signals[BRIGHTNESS_CHANGED] =
+    g_signal_new ("brightness_changed",
+                  G_OBJECT_CLASS_TYPE (object_class),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (WnckWindowClass, brightness_changed),
+                  NULL, NULL,
+                  g_cclosure_marshal_VOID__VOID,
+                  G_TYPE_NONE, 0);
 }
 
 static void
@@ -421,6 +462,9 @@ _wnck_window_create (Window      xwindow
   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;
+  window->priv->need_update_saturation = TRUE;
+  window->priv->need_update_brightness = TRUE;
   window->priv->need_emit_name_changed = FALSE;
   window->priv->need_emit_icon_changed = FALSE;
   force_update_now (window);
@@ -1637,6 +1681,77 @@ wnck_window_set_geometry (WnckWindow    
                              gravity_and_flags, x, y, width, 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));
+}
+
+
+guint
+wnck_window_get_saturation (WnckWindow *window)
+{
+  guint64 o;
+
+  g_return_val_if_fail (WNCK_IS_WINDOW (window), 0);
+
+  o = ((guint64) window->priv->saturation * 1005) / G_MAXUINT32;
+
+  return o / 10;
+}
+
+void
+wnck_window_set_saturation (WnckWindow *window,
+			 guint      saturation)
+{
+  g_return_if_fail (WNCK_IS_WINDOW (window));
+
+  _wnck_change_saturation (WNCK_SCREEN_XSCREEN (window->priv->screen),
+			wnck_window_get_xid (window),
+			(((guint64) saturation * G_MAXUINT32) / 100));
+}
+
+
+guint
+wnck_window_get_brightness (WnckWindow *window)
+{
+  guint64 o;
+
+  g_return_val_if_fail (WNCK_IS_WINDOW (window), 0);
+
+  o = ((guint64) window->priv->brightness * 1005) / G_MAXUINT32;
+
+  return o / 10;
+}
+
+void
+wnck_window_set_brightness (WnckWindow *window,
+			 guint      brightness)
+{
+  g_return_if_fail (WNCK_IS_WINDOW (window));
+
+  _wnck_change_brightness (WNCK_SCREEN_XSCREEN (window->priv->screen),
+			wnck_window_get_xid (window),
+			(((guint64) brightness * G_MAXUINT32) / 100));
+}
+
 /**
  * wnck_window_is_visible_on_workspace:
  * @window: a #WnckWindow
@@ -1870,6 +1985,26 @@ _wnck_window_process_property_notify (Wn
       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);
+    }
+
+  else if (xevent->xproperty.atom ==
+           _wnck_atom_get ("_NET_WM_WINDOW_SATURATION"))
+    {
+      window->priv->need_update_saturation = TRUE;
+      queue_update (window);
+    }
+
+  else if (xevent->xproperty.atom ==
+           _wnck_atom_get ("_NET_WM_WINDOW_BRIGHTNESS"))
+    {
+      window->priv->need_update_brightness = TRUE;
+      queue_update (window);
+    }
 }
 
 void
@@ -2396,6 +2531,39 @@ update_wmhints (WnckWindow *window)
 }
 
 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
+update_saturation (WnckWindow *window)
+{
+  if (!window->priv->need_update_saturation)
+    return;
+
+  window->priv->need_update_saturation = FALSE;
+
+  window->priv->saturation = _wnck_get_saturation (window->priv->xwindow);
+}
+
+static void
+update_brightness (WnckWindow *window)
+{
+  if (!window->priv->need_update_brightness)
+    return;
+
+  window->priv->need_update_brightness = FALSE;
+
+  window->priv->brightness = _wnck_get_brightness (window->priv->xwindow);
+}
+
+static void
 force_update_now (WnckWindow *window)
 {
   WnckWindowState old_state;
@@ -2430,6 +2598,9 @@ force_update_now (WnckWindow *window)
                               */
   update_workspace (window); /* emits signals */
   update_actions (window);
+  update_opacity (window);
+  update_saturation (window);
+  update_brightness (window);
 
   get_icons (window);
   
--- libwnck-2.19.2/libwnck/window.h.appearance	2007-05-13 06:45:13.000000000 -0400
+++ libwnck-2.19.2/libwnck/window.h	2007-05-19 21:39:55.000000000 -0400
@@ -151,6 +151,15 @@ struct _WnckWindowClass
 
   /* Changed size/position */
   void (* geometry_changed)      (WnckWindow       *window);
+  
+  /* Changed opacity */
+  void (* opacity_changed)      (WnckWindow       *window);
+
+  /* Changed saturation */
+  void (* saturation_changed)      (WnckWindow       *window);
+
+  /* Changed brightness */
+  void (* brightness_changed)      (WnckWindow       *window);
 };
 
 GType wnck_window_get_type (void) G_GNUC_CONST;
@@ -266,6 +275,15 @@ void wnck_window_set_geometry (WnckWindo
                                int                       width,
                                int                       height);
 
+guint wnck_window_get_opacity (WnckWindow *window);
+void  wnck_window_set_opacity (WnckWindow *window, guint opacity);
+
+guint wnck_window_get_saturation (WnckWindow *window);
+void  wnck_window_set_saturation (WnckWindow *window, guint saturation);
+
+guint wnck_window_get_brightness (WnckWindow *window);
+void  wnck_window_set_brightness (WnckWindow *window, guint brightness);
+
 gboolean wnck_window_is_visible_on_workspace (WnckWindow    *window,
                                               WnckWorkspace *workspace);
 gboolean wnck_window_is_on_workspace         (WnckWindow    *window,
--- libwnck-2.19.2/libwnck/window-action-menu.c.appearance	2007-05-13 06:45:13.000000000 -0400
+++ libwnck-2.19.2/libwnck/window-action-menu.c	2007-05-19 21:46:44.000000000 -0400
@@ -36,6 +36,10 @@ typedef enum
   ABOVE,
   MOVE,
   RESIZE,
+  CHANGE_OPACITY,
+  CHANGE_SATURATION,
+  CHANGE_BRIGHTNESS,
+  RESET,
   PIN,
   UNPIN,
   LEFT,
@@ -56,6 +60,11 @@ struct _ActionMenuData
   GtkWidget *above_item;
   GtkWidget *move_item;
   GtkWidget *resize_item;
+  GtkWidget *appearance_item;
+  GtkWidget *opacity_item;
+  GtkWidget *saturation_item;
+  GtkWidget *brightness_item;
+  GtkWidget *reset_item;
   GtkWidget *close_item;
   GtkWidget *workspace_separator;
   GtkWidget *pin_item;
@@ -158,6 +167,46 @@ item_activated_callback (GtkWidget *menu
     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 CHANGE_SATURATION:
+      {
+	int saturation_value;
+
+	saturation_value =
+	    GPOINTER_TO_INT (g_object_get_data (G_OBJECT (menu_item),
+						"saturation"));
+	
+	wnck_window_set_saturation (amd->window, saturation_value);
+	break;
+      }
+    case CHANGE_BRIGHTNESS:
+      {
+	int brightness_value;
+
+	brightness_value =
+	    GPOINTER_TO_INT (g_object_get_data (G_OBJECT (menu_item),
+						"brightness"));
+	
+	wnck_window_set_brightness (amd->window, brightness_value);
+	break;
+      }
+    case RESET:
+      {
+	wnck_window_set_brightness (amd->window, 100);
+	wnck_window_set_saturation (amd->window, 100);
+	wnck_window_set_opacity (amd->window, 100);
+	break;
+      } 
     case PIN:
         wnck_window_unpin (amd->window);
       break;
@@ -257,6 +306,10 @@ update_menu_state (ActionMenuData *amd)
   WnckWindowActions  actions;  
   WnckScreen        *screen;
 
+  guint present_opacity;
+  guint present_saturation;
+  guint present_brightness;
+
   amd->idle_handler = 0;
   
   actions = wnck_window_get_actions (amd->window);
@@ -304,6 +357,19 @@ update_menu_state (ActionMenuData *amd)
   gtk_widget_set_sensitive (amd->above_item,
                             (actions & WNCK_WINDOW_ACTION_ABOVE) != 0);
 
+  present_opacity = wnck_window_get_opacity (amd->window);
+  present_saturation = wnck_window_get_saturation (amd->window);
+  present_brightness = wnck_window_get_brightness (amd->window);
+
+  if (present_opacity == 100 && present_saturation == 100 && present_brightness == 100)
+    {
+      gtk_widget_set_sensitive (amd->reset_item, FALSE);      
+    }
+  else
+    {
+      gtk_widget_set_sensitive (amd->reset_item, TRUE); 
+    }
+
   g_signal_handlers_block_by_func (G_OBJECT (amd->pin_item),
                                    item_activated_callback,
                                    GINT_TO_POINTER (PIN));
@@ -560,7 +626,7 @@ get_workspace_name_with_accel (WnckWindo
 GtkWidget*
 wnck_create_window_action_menu (WnckWindow *window)
 {
-  GtkWidget *menu, *submenu;
+  GtkWidget *menu, *submenu, *submenu2;
   ActionMenuData *amd;
   GtkWidget *separator;
   int num_workspaces, present_workspace, i;
@@ -608,6 +674,154 @@ wnck_create_window_action_menu (WnckWind
   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"))
+  {
+
+      amd->appearance_item = gtk_menu_item_new_with_mnemonic (_("_Appearance"));
+      gtk_widget_show (amd->appearance_item);
+
+      submenu = gtk_menu_new ();
+      gtk_menu_item_set_submenu (GTK_MENU_ITEM (amd->appearance_item),
+				 submenu);
+
+      gtk_menu_shell_append (GTK_MENU_SHELL (menu), amd->appearance_item);
+
+  }
+
+  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);
+
+      submenu2 = gtk_menu_new ();
+      gtk_menu_item_set_submenu (GTK_MENU_ITEM (amd->opacity_item),
+				 submenu2);
+
+      gtk_menu_shell_append (GTK_MENU_SHELL (submenu), 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 (submenu2), item);
+
+	  set_item_text (item, label);
+	  set_item_stock (item, NULL);
+
+	  g_free (label);
+      }
+  }
+
+  if (wnck_screen_net_wm_supports (wnck_window_get_screen (amd->window),
+				   "_NET_WM_WINDOW_SATURATION"))
+  {
+      guint present_saturation;
+      gint  j;
+
+      amd->saturation_item = gtk_menu_item_new_with_mnemonic (_("_Saturation"));
+      gtk_widget_show (amd->saturation_item);
+
+      submenu2 = gtk_menu_new ();
+      gtk_menu_item_set_submenu (GTK_MENU_ITEM (amd->saturation_item),
+				 submenu2);
+
+      gtk_menu_shell_append (GTK_MENU_SHELL (submenu), amd->saturation_item);
+
+      present_saturation = wnck_window_get_saturation (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_SATURATION);
+
+	  o = (j + 1) * 25;
+	  g_object_set_data (G_OBJECT (item), "saturation", GINT_TO_POINTER (o));
+
+	  if (o == present_saturation)
+	      gtk_widget_set_sensitive (item, FALSE);
+
+	  gtk_menu_shell_append (GTK_MENU_SHELL (submenu2), item);
+
+	  set_item_text (item, label);
+	  set_item_stock (item, NULL);
+
+	  g_free (label);
+      }
+  }
+
+  if (wnck_screen_net_wm_supports (wnck_window_get_screen (amd->window),
+				   "_NET_WM_WINDOW_BRIGHTNESS"))
+  {
+      guint present_brightness;
+      gint  j;
+
+      amd->brightness_item = gtk_menu_item_new_with_mnemonic (_("_Brightness"));
+      gtk_widget_show (amd->brightness_item);
+
+      submenu2 = gtk_menu_new ();
+      gtk_menu_item_set_submenu (GTK_MENU_ITEM (amd->brightness_item),
+				 submenu2);
+
+      gtk_menu_shell_append (GTK_MENU_SHELL (submenu), amd->brightness_item);
+
+      present_brightness = wnck_window_get_brightness (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_BRIGHTNESS);
+
+	  o = (j + 1) * 25;
+	  g_object_set_data (G_OBJECT (item), "brightness", GINT_TO_POINTER (o));
+
+	  if (o == present_brightness)
+	      gtk_widget_set_sensitive (item, FALSE);
+
+	  gtk_menu_shell_append (GTK_MENU_SHELL (submenu2), item);
+
+	  set_item_text (item, label);
+	  set_item_stock (item, NULL);
+
+	  g_free (label);
+      }
+  }
+  
+  if (wnck_screen_net_wm_supports (wnck_window_get_screen (amd->window),
+				   "_NET_WM_WINDOW_OPACITY"))
+  {
+      amd->reset_item = make_menu_item (amd, RESET);
+      gtk_menu_shell_append (GTK_MENU_SHELL (submenu), amd->reset_item);  
+      
+      set_item_text (amd->reset_item, _("_Reset settings"));
+  }
+
+
   separator = gtk_separator_menu_item_new ();
   gtk_widget_show (separator);
   gtk_menu_shell_append (GTK_MENU_SHELL (menu),

libwnck-2.19.2-viewport.patch:

--- NEW FILE libwnck-2.19.2-viewport.patch ---
--- libwnck-2.19.2/libwnck/window-action-menu.c.viewport	2007-05-19 21:47:18.000000000 -0400
+++ libwnck-2.19.2/libwnck/window-action-menu.c	2007-05-19 21:48:56.000000000 -0400
@@ -46,7 +46,13 @@ typedef enum
   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;
@@ -74,6 +80,13 @@ struct _ActionMenuData
   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;
 };
 
@@ -260,6 +273,86 @@ item_activated_callback (GtkWidget *menu
                                        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, ww, hw;
+
+        width = wnck_screen_get_width (wnck_window_get_screen (amd->window));
+        wnck_window_get_geometry (amd->window, &xw, &yw, &ww, &hw);
+        wnck_window_set_geometry (amd->window, 0,
+                                  WNCK_WINDOW_CHANGE_X|WNCK_WINDOW_CHANGE_Y,
+                                  xw - width, yw,
+                                  ww, hw);
+        break;
+      }
+    case VIEWPORT_RIGHT:
+      {
+        int width, xw, yw, ww, hw;
+
+        width = wnck_screen_get_width (wnck_window_get_screen (amd->window));
+        wnck_window_get_geometry (amd->window, &xw, &yw, &ww, &hw);
+        wnck_window_set_geometry (amd->window, 0,
+                                  WNCK_WINDOW_CHANGE_X|WNCK_WINDOW_CHANGE_Y,
+                                  xw + width, yw,
+                                  ww, hw);
+        break;
+      }
+    case VIEWPORT_UP:
+      {
+        int height, xw, yw, ww, hw;
+
+        height = wnck_screen_get_height (wnck_window_get_screen (amd->window));
+        wnck_window_get_geometry (amd->window, &xw, &yw, &ww, &hw);
+        wnck_window_set_geometry (amd->window, 0,
+                                  WNCK_WINDOW_CHANGE_X|WNCK_WINDOW_CHANGE_Y,
+                                  xw, yw - height,
+                                  ww, hw);
+        break;
+      }
+    case VIEWPORT_DOWN:
+      {
+        int height, xw, yw, ww, hw;
+
+        height = wnck_screen_get_height (wnck_window_get_screen (amd->window));
+        wnck_window_get_geometry (amd->window, &xw, &yw, &ww, &hw);
+        wnck_window_set_geometry (amd->window, 0,
+                                  WNCK_WINDOW_CHANGE_X|WNCK_WINDOW_CHANGE_Y,
+                                  xw, yw + height,
+                                  ww, hw);
+        break;
+      }
+    case MOVE_TO_VIEWPORT:
+      {
+        WnckWorkspace *workspace;
+        int viewport_x, viewport_y, xw, yw, x, y, width, height;
+
+        workspace = wnck_window_get_workspace (amd->window);
+        if (!workspace)
+            break;
+        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, &width, &height);
+
+        if (wnck_window_is_sticky (amd->window))
+            wnck_window_unstick (amd->window);
+
+        wnck_window_set_geometry (amd->window, 0,
+                                  WNCK_WINDOW_CHANGE_X|WNCK_WINDOW_CHANGE_Y,
+                                  xw + x - viewport_x,
+                                  yw + y - viewport_y,
+                                  width, height);
+        break;
+      }
     }
 }
 
@@ -440,6 +533,56 @@ update_menu_state (ActionMenuData *amd)
       gtk_widget_show (amd->unpin_item);
       gtk_widget_hide (amd->workspace_item);
     }
+
+  if (wnck_window_is_sticky (amd->window))
+    {
+      set_item_text (amd->stick_item, _("_Only on This Workspace"));
+      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 on Visible Workspace"));
+      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);
+    }
   
   return FALSE;
 }
@@ -632,6 +775,10 @@ wnck_create_window_action_menu (WnckWind
   int num_workspaces, present_workspace, i;
   WnckWorkspace *workspace;
   WnckWorkspaceLayout layout;
+  int viewport_x, viewport_y, viewport_width, viewport_height;
+  int screen_width, screen_height;
+  int x, y;
+
   GSList *pin_group;
 
   _wnck_stock_icons_init ();
@@ -952,7 +1099,115 @@ wnck_create_window_action_menu (WnckWind
       g_free (name);
       g_free (label);	
     }
-		 
+
+  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);
+
+  if (wnck_window_is_pinned (amd->window))
+      workspace = wnck_screen_get_active_workspace (wnck_window_get_screen (amd->window));
+  else
+      workspace = wnck_window_get_workspace (amd->window);
+  if (!workspace)
+      goto bail;
+
+  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 Workspace _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 Workspace 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 Workspace _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 Workspace _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 _Workspace")); 
+      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 (_("Workspace _%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);
+    }
+
+  bail:
   g_signal_connect_object (G_OBJECT (amd->window), 
                            "state_changed",
                            G_CALLBACK (state_changed_callback),


Index: .cvsignore
===================================================================
RCS file: /cvs/pkgs/rpms/libwnck/devel/.cvsignore,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -r1.44 -r1.45
--- .cvsignore	13 Mar 2007 06:06:20 -0000	1.44
+++ .cvsignore	20 May 2007 01:54:50 -0000	1.45
@@ -1 +1 @@
-libwnck-2.18.0.tar.bz2
+libwnck-2.19.2.tar.bz2


Index: libwnck.spec
===================================================================
RCS file: /cvs/pkgs/rpms/libwnck/devel/libwnck.spec,v
retrieving revision 1.68
retrieving revision 1.69
diff -u -r1.68 -r1.69
--- libwnck.spec	9 Apr 2007 23:05:18 -0000	1.68
+++ libwnck.spec	20 May 2007 01:54:50 -0000	1.69
@@ -5,10 +5,10 @@
 
 Summary: Window Navigator Construction Kit
 Name: libwnck
-Version: 2.18.0
-Release: 3%{?dist}
-URL: http://ftp.gnome.org/pub/GNOME/sources/libwnck/
-Source0: http://ftp.gnome.org/pub/gnome/sources/libwnck/2.18/%{name}-%{version}.tar.bz2
+Version: 2.19.2
+Release: 1%{?dist}
+URL: http://download.gnome.org/sources/libwnck/
+Source0: http://download.gnome.org/sources/libwnck/2.19/%{name}-%{version}.tar.bz2
 License: LGPL
 Group: System Environment/Libraries
 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
@@ -28,11 +28,9 @@
 
 # make the pager visible when running compiz
 Patch1: libwnck-2.16.0-viewports.patch
-Patch3: libwnck-2.18.0-appearance.patch
-Patch4: libwnck-2.18.0-viewport.patch
+Patch3: libwnck-2.19.2-appearance.patch
+Patch4: libwnck-2.19.2-viewport.patch
 Patch5: libwnck-2.18.0-above.patch
-# http://bugzilla.gnome.org/show_bug.cgi?id=428056
-Patch6: libwnck-2.18.0-property-leak.patch
 
 %description
 
@@ -65,7 +63,6 @@
 %patch3 -p1 -b .appearance
 %patch4 -p1 -b .viewport
 %patch5 -p1 -b .above
-%patch6 -p1 -b .property-leak
 
 %build
 
@@ -104,6 +101,10 @@
 %{_datadir}/gtk-doc/html/libwnck
 
 %changelog
+* Sat May 19 2007 Matthias Clasen <mclasen at redhat.com> - 2.19.2-1
+- Update to 2.19.2
+- Update patches
+
 * Tue Apr 10 2007 Matthias Clasen <mclasen at redhat.com> - 2.18.0-3
 - Plug a small memory leak
 


Index: sources
===================================================================
RCS file: /cvs/pkgs/rpms/libwnck/devel/sources,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -r1.44 -r1.45
--- sources	13 Mar 2007 06:06:20 -0000	1.44
+++ sources	20 May 2007 01:54:50 -0000	1.45
@@ -1 +1 @@
-9b02dea0448a28d73b46a1e8c6eab3d5  libwnck-2.18.0.tar.bz2
+6f69efaf57b8cf76d772af4a2f4ad4b2  libwnck-2.19.2.tar.bz2


--- libwnck-2.18.0-appearance.patch DELETED ---


--- libwnck-2.18.0-viewport.patch DELETED ---




More information about the fedora-extras-commits mailing list