[Xfce4-commits] <xfce4-panel:devel> * Move plugin [FREE] and [SAVE] to plugin dispose. * Fix bug in Gtk+ 2.13 where gtk_window_get_position() is not working.

Nick Schermer nick at xfce.org
Tue Aug 11 20:22:06 CEST 2009


Updating branch refs/heads/devel
         to 1ba7165b1e7a37afce4e583e496c963c502b30ee (commit)
       from 0981be42938106bfe3a9434da5e7dafff255e4de (commit)

commit 1ba7165b1e7a37afce4e583e496c963c502b30ee
Author: Nick Schermer <nick at xfce.org>
Date:   Sun Jun 15 20:35:51 2008 +0200

    * Move plugin [FREE] and [SAVE] to plugin dispose.
    * Fix bug in Gtk+ 2.13 where gtk_window_get_position() is not working.

 libxfce4panel/xfce-panel-plugin.c |   19 ++++++++++++++++---
 panel/panel-window.c              |   13 +++++++------
 2 files changed, 23 insertions(+), 9 deletions(-)

diff --git a/libxfce4panel/xfce-panel-plugin.c b/libxfce4panel/xfce-panel-plugin.c
index b18da1c..64554d8 100644
--- a/libxfce4panel/xfce-panel-plugin.c
+++ b/libxfce4panel/xfce-panel-plugin.c
@@ -45,6 +45,7 @@ static void         xfce_panel_plugin_set_property         (GObject
                                                             guint                         prop_id,
                                                             const GValue                 *value,
                                                             GParamSpec                   *pspec);
+static void         xfce_panel_plugin_dispose              (GObject                      *object);
 static void         xfce_panel_plugin_finalize             (GObject                      *object);
 static gboolean     xfce_panel_plugin_button_press_event   (GtkWidget                    *widget,
                                                             GdkEventButton               *event);
@@ -133,6 +134,7 @@ xfce_panel_plugin_class_init (XfcePanelPluginClass *klass)
   gobject_class = G_OBJECT_CLASS (klass);
   gobject_class->get_property = xfce_panel_plugin_get_property;
   gobject_class->set_property = xfce_panel_plugin_set_property;
+  gobject_class->dispose = xfce_panel_plugin_dispose;
   gobject_class->finalize = xfce_panel_plugin_finalize;
 
   gtkwidget_class = GTK_WIDGET_CLASS (klass);
@@ -431,12 +433,23 @@ xfce_panel_plugin_set_property (GObject      *object,
 
 
 static void
-xfce_panel_plugin_finalize (GObject *object)
+xfce_panel_plugin_dispose (GObject *object)
 {
-  XfcePanelPlugin *plugin = XFCE_PANEL_PLUGIN (object);
+  /* let the plugin save its configuration */
+  g_signal_emit (G_OBJECT (object), plugin_signals[SAVE], 0);
 
   /* allow the plugin to cleanup */
-  g_signal_emit (G_OBJECT (plugin), plugin_signals[FREE_DATA], 0);
+  g_signal_emit (G_OBJECT (object), plugin_signals[FREE_DATA], 0);
+
+  (*G_OBJECT_CLASS (xfce_panel_plugin_parent_class)->dispose) (object);
+}
+
+
+
+static void
+xfce_panel_plugin_finalize (GObject *object)
+{
+  XfcePanelPlugin *plugin = XFCE_PANEL_PLUGIN (object);
 
   /* destroy the menu */
   if (plugin->priv->menu)
diff --git a/panel/panel-window.c b/panel/panel-window.c
index 31f22c8..02a0ca3 100644
--- a/panel/panel-window.c
+++ b/panel/panel-window.c
@@ -238,6 +238,7 @@ panel_window_init (PanelWindow *window)
   gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
   gtk_window_set_decorated (GTK_WINDOW (window), FALSE);
   gtk_window_set_type_hint (GTK_WINDOW (window), GDK_WINDOW_TYPE_HINT_DOCK);
+  gtk_window_set_gravity (GTK_WINDOW (window), GDK_GRAVITY_STATIC);
 
   /* init vars */
   window->is_composited = FALSE;
@@ -689,6 +690,7 @@ panel_window_autohide_window (PanelWindow *window)
 
   /* create window */
   popup = gtk_window_new (GTK_WINDOW_POPUP);
+  gtk_window_set_gravity (GTK_WINDOW (popup), GDK_GRAVITY_STATIC);
 
   /* connect signals to monitor enter/leave events */
   g_signal_connect (G_OBJECT (popup), "enter-notify-event", G_CALLBACK (panel_window_autohide_enter_notify_event), window);
@@ -1512,13 +1514,12 @@ panel_window_get_position (PanelWindow *window,
                            gint        *root_x,
                            gint        *root_y)
 {
-  /* get the window position */
-  gtk_window_get_position (GTK_WINDOW (window), root_x, root_y);
-
-  /* check if the coordinates of the hidden window should be used */
-  if (window->autohide_window
-      && ((root_x && *root_x == OFFSCREEN) || (root_y && *root_y == OFFSCREEN)))
+  /* get the window position of the visible window */
+  if (G_UNLIKELY (window->autohide_window
+      && (window->autohide_status == HIDDEN || window->autohide_status == POPUP_QUEUED)))
     gtk_window_get_position (GTK_WINDOW (window->autohide_window), root_x, root_y);
+  else
+    gtk_window_get_position (GTK_WINDOW (window), root_x, root_y);
 }
 
 



More information about the Xfce4-commits mailing list