[Goodies-commits] r3924 - xfmpc/trunk/src
Mike Massonnet
mmassonnet at xfce.org
Fri Feb 8 12:34:25 CET 2008
Author: mmassonnet
Date: 2008-02-08 11:34:24 +0000 (Fri, 08 Feb 2008)
New Revision: 3924
Modified:
xfmpc/trunk/src/interface.c
xfmpc/trunk/src/main.c
xfmpc/trunk/src/preferences.c
Log:
Save the sticky window state.
* src/src/preferences.c:
- Add LastWindowStateSticky preference
* src/interface.c(xfmpc_interface_init):
- Connect signal "window-state-event" to xfmpc_interface_state_event
- Restore the preference LastWindowStateSticky
* src/interface.c(xfmpc_interface_state_event):
- Save the changes of the sticky window state
* src/main.c:
- Register transform function from G_TYPE_STRING to G_TYPE_BOOLEAN
Modified: xfmpc/trunk/src/interface.c
===================================================================
--- xfmpc/trunk/src/interface.c 2008-02-08 10:33:18 UTC (rev 3923)
+++ xfmpc/trunk/src/interface.c 2008-02-08 11:34:24 UTC (rev 3924)
@@ -42,6 +42,8 @@
static gboolean xfmpc_interface_reconnect (XfmpcInterface *interface);
+static gboolean xfmpc_interface_state_event (XfmpcInterface *interface,
+ GdkEventWindowState *event);
static gboolean xfmpc_interface_closed (XfmpcInterface *interface,
GdkEvent *event);
static void xfmpc_interface_action_previous (GtkAction *action,
@@ -150,15 +152,20 @@
gtk_window_set_icon_name (GTK_WINDOW (interface), "stock_volume");
gtk_window_set_title (GTK_WINDOW (interface), _("Xfmpc"));
gtk_container_set_border_width (GTK_CONTAINER (interface), BORDER);
- g_signal_connect (G_OBJECT (interface), "delete-event", G_CALLBACK (xfmpc_interface_closed), interface);
+ g_signal_connect (G_OBJECT (interface), "delete-event", G_CALLBACK (xfmpc_interface_closed), NULL);
+ g_signal_connect (G_OBJECT (interface), "window-state-event", G_CALLBACK (xfmpc_interface_state_event), NULL);
gint posx, posy;
+ gboolean sticky;
g_object_get (G_OBJECT (interface->preferences),
"last-window-posx", &posx,
"last-window-posy", &posy,
+ "last-window-state-sticky", &sticky,
NULL);
if (G_LIKELY (posx != -1 && posy != -1))
gtk_window_move (GTK_WINDOW (interface), posx, posy);
+ if (sticky == TRUE)
+ gtk_window_stick (GTK_WINDOW (interface));
/* === Interface widgets === */
GtkWidget *image = gtk_image_new_from_stock (GTK_STOCK_MEDIA_PREVIOUS, GTK_ICON_SIZE_BUTTON);
@@ -464,6 +471,29 @@
}
static gboolean
+xfmpc_interface_state_event (XfmpcInterface *interface,
+ GdkEventWindowState *event)
+{
+ if (G_UNLIKELY (event->type != GDK_WINDOW_STATE))
+ return FALSE;
+
+ /**
+ * Hiding the top level window will unstick it too, and send a
+ * window-state-event signal, so here we take the value only if
+ * the window is visible
+ **/
+ if (event->changed_mask & GDK_WINDOW_STATE_STICKY && GTK_WIDGET_VISIBLE (GTK_WIDGET (interface)))
+ {
+ gboolean sticky = ((gboolean) event->new_window_state & GDK_WINDOW_STATE_STICKY) == FALSE ? FALSE : TRUE;
+ g_object_set (G_OBJECT (interface->preferences),
+ "last-window-state-sticky", sticky,
+ NULL);
+ }
+
+ return FALSE;
+}
+
+static gboolean
xfmpc_interface_closed (XfmpcInterface *interface,
GdkEvent *event)
{
Modified: xfmpc/trunk/src/main.c
===================================================================
--- xfmpc/trunk/src/main.c 2008-02-08 10:33:18 UTC (rev 3923)
+++ xfmpc/trunk/src/main.c 2008-02-08 11:34:24 UTC (rev 3924)
@@ -35,8 +35,15 @@
g_value_set_int (dst, (gint) strtol (g_value_get_string (src), NULL, 10));
}
+static void
+transform_string_to_boolean (const GValue *src,
+ GValue *dst)
+{
+ g_value_set_boolean (dst, (gboolean) strcmp (g_value_get_string (src), "FALSE") != 0);
+}
+
int
main (int argc, char *argv[])
{
@@ -45,6 +52,7 @@
gtk_init (&argc, &argv);
g_value_register_transform_func (G_TYPE_STRING, G_TYPE_INT, transform_string_to_int);
+ g_value_register_transform_func (G_TYPE_STRING, G_TYPE_BOOLEAN, transform_string_to_boolean);
gtk_window_set_default_icon_name ("xfmpc");
Modified: xfmpc/trunk/src/preferences.c
===================================================================
--- xfmpc/trunk/src/preferences.c 2008-02-08 10:33:18 UTC (rev 3923)
+++ xfmpc/trunk/src/preferences.c 2008-02-08 11:34:24 UTC (rev 3924)
@@ -33,6 +33,7 @@
PROP_0,
PROP_LAST_WINDOW_POSX,
PROP_LAST_WINDOW_POSY,
+ PROP_LAST_WINDOW_STATE_STICKY,
N_PROPERTIES,
};
@@ -130,6 +131,14 @@
"Window position on axis y",
-1, G_MAXINT, -1,
G_PARAM_READWRITE));
+
+ g_object_class_install_property (gobject_class,
+ PROP_LAST_WINDOW_STATE_STICKY,
+ g_param_spec_boolean ("last-window-state-sticky",
+ "LastWindowStateSticky",
+ "Sticky bit on window",
+ FALSE,
+ G_PARAM_READWRITE));
}
static void
More information about the Goodies-commits
mailing list