[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