[ekiga] GMWindow: Allow disabling hide on escape.
- From: Damien Sandras <dsandras src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [ekiga] GMWindow: Allow disabling hide on escape.
- Date: Thu, 2 Feb 2012 16:34:00 +0000 (UTC)
commit 2f9dfd8a26014ac140743a133e74438119345bfe
Author: Damien Sandras <dsandras beip be>
Date: Thu Feb 2 17:32:26 2012 +0100
GMWindow: Allow disabling hide on escape.
Several code cleanups.
lib/gui/gmwindow.c | 108 ++++++++++++++++++++++++++++++++--------------------
lib/gui/gmwindow.h | 16 +++++++-
2 files changed, 81 insertions(+), 43 deletions(-)
---
diff --git a/lib/gui/gmwindow.c b/lib/gui/gmwindow.c
index 236abc1..13de5d9 100644
--- a/lib/gui/gmwindow.c
+++ b/lib/gui/gmwindow.c
@@ -29,8 +29,8 @@
/*
* gmwindow.c - description
* -------------------------
- * begin : 16 August 2007
- * copyright : (c) 2007 by Damien Sandras
+ * begin : 16 August 2007
+ * copyright : (c) 2007 by Damien Sandras
* description : Implementation of a GtkWindow able to restore
* its position and size in a GmConf key.
*
@@ -77,8 +77,8 @@ enum {
G_DEFINE_TYPE (GmWindow, gm_window, GTK_TYPE_WINDOW);
static gboolean
-gm_window_delete_event (GtkWidget *w,
- gpointer data);
+gm_window_delete_event_cb (GtkWidget *w,
+ gpointer data);
static void
window_show_cb (GtkWidget *w,
@@ -88,12 +88,12 @@ static void
window_hide_cb (GtkWidget *w,
gpointer data);
-static gboolean
+static gboolean
gm_window_configure_event (GtkWidget *widget,
GdkEventConfigure *event);
-/*
+/*
* GObject stuff
*/
@@ -196,13 +196,13 @@ gm_window_class_init (GmWindowClass* klass)
gobject_class->get_property = gm_window_get_property;
gobject_class->set_property = gm_window_set_property;
- spec = g_param_spec_string ("key", "Key", "Key",
+ spec = g_param_spec_string ("key", "Key", "Key",
NULL, (GParamFlags) G_PARAM_READWRITE);
- g_object_class_install_property (gobject_class, GM_WINDOW_KEY, spec);
+ g_object_class_install_property (gobject_class, GM_WINDOW_KEY, spec);
- spec = g_param_spec_boolean ("hide_on_esc", "Hide on Escape", "Hide on Escape",
+ spec = g_param_spec_boolean ("hide_on_esc", "Hide on Escape", "Hide on Escape",
TRUE, (GParamFlags) G_PARAM_READWRITE);
- g_object_class_install_property (gobject_class, GM_HIDE_ON_ESC, spec);
+ g_object_class_install_property (gobject_class, GM_HIDE_ON_ESC, spec);
spec = g_param_spec_boolean ("hide_on_delete", "Hide on delete-event", "Hide on delete-event (or just relay the event)",
TRUE, (GParamFlags) G_PARAM_READWRITE);
@@ -223,8 +223,8 @@ gm_window_init (GmWindow* self)
gtk_accel_group_connect (self->priv->accel, GDK_Escape, (GdkModifierType) 0, GTK_ACCEL_LOCKED,
g_cclosure_new_swap (G_CALLBACK (gtk_widget_hide), (gpointer) self, NULL));
- g_signal_connect (self, "delete_event",
- G_CALLBACK (gm_window_delete_event), NULL);
+ g_signal_connect (self, "delete-event",
+ G_CALLBACK (gm_window_delete_event_cb), NULL);
g_signal_connect (self, "show",
G_CALLBACK (window_show_cb), self);
@@ -236,35 +236,36 @@ gm_window_init (GmWindow* self)
G_CALLBACK (gm_window_configure_event), self);
}
-/*
+
+/*
* Our own stuff
*/
-
+// FIXME drop this when removing old GMWindows
static gboolean
-delete_event_cb (GtkWidget* window,
- G_GNUC_UNUSED gpointer data)
+old_style_gm_window_delete_event_cb (GtkWidget* window,
+ G_GNUC_UNUSED gpointer data)
{
- gm_window_hide (window);
+ gm_window_hide (window);
+ return TRUE;
+ }
- return TRUE;
-}
static gboolean
-gm_window_delete_event (GtkWidget *w,
- G_GNUC_UNUSED gpointer data)
+gm_window_delete_event_cb (GtkWidget *w,
+ G_GNUC_UNUSED gpointer data)
{
GmWindow* self = NULL;
self = GM_WINDOW (w);
- if (self->priv->hide_on_delete) {
- gtk_widget_hide (w);
- return TRUE;
- } else {
- return FALSE;
- }
+ if (self->priv->hide_on_delete)
+ gm_window_hide (w);
+
+
+ return FALSE;
}
+
static void
window_show_cb (GtkWidget *w,
G_GNUC_UNUSED gpointer data)
@@ -279,7 +280,7 @@ window_show_cb (GtkWidget *w,
gchar *size = NULL;
gchar *position = NULL;
gchar **couple = NULL;
-
+
self = GM_WINDOW (w);
g_return_if_fail (strcmp (self->priv->key, ""));
@@ -341,9 +342,9 @@ window_hide_cb (GtkWidget *w,
gchar *conf_key_position = NULL;
gchar *size = NULL;
gchar *position = NULL;
-
+
g_return_if_fail (w != NULL);
-
+
self = GM_WINDOW (w);
g_return_if_fail (strcmp (self->priv->key, ""));
@@ -363,13 +364,13 @@ window_hide_cb (GtkWidget *w,
gm_conf_set_string (conf_key_size, size);
g_free (size);
}
-
+
g_free (conf_key_position);
g_free (conf_key_size);
}
-static gboolean
+static gboolean
gm_window_configure_event (GtkWidget *self,
GdkEventConfigure *event)
{
@@ -382,7 +383,7 @@ gm_window_configure_event (GtkWidget *self,
}
-/*
+/*
* Public API
*/
GtkWidget *
@@ -412,7 +413,7 @@ gm_window_set_key (GmWindow *window,
}
-void
+void
gm_window_get_size (GmWindow *self,
int *x,
int *y)
@@ -438,6 +439,7 @@ gm_window_get_size (GmWindow *self,
g_strfreev (couple);
}
+
void
gm_window_set_hide_on_delete (GmWindow *window,
gboolean hide_on_delete)
@@ -447,6 +449,7 @@ gm_window_set_hide_on_delete (GmWindow *window,
g_object_set (window, "hide_on_delete", hide_on_delete, NULL);
}
+
gboolean
gm_window_get_hide_on_delete (GmWindow *window)
{
@@ -455,6 +458,26 @@ gm_window_get_hide_on_delete (GmWindow *window)
return window->priv->hide_on_delete;
}
+
+void
+gm_window_set_hide_on_escape (GmWindow *window,
+ gboolean hide_on_esc)
+{
+ g_return_if_fail (GM_IS_WINDOW (window));
+
+ g_object_set (window, "hide_on_esc", hide_on_esc, NULL);
+}
+
+
+gboolean
+gm_window_get_hide_on_escape (GmWindow *window)
+{
+ g_return_val_if_fail (GM_IS_WINDOW (window), FALSE);
+
+ return window->priv->hide_on_esc;
+}
+
+
#ifndef WIN32
// helper copied from gdk
static void
@@ -604,15 +627,18 @@ gm_window_hide (GtkWidget* w)
g_free (conf_key_size);
}
+
void
gm_window_hide_on_delete (GtkWidget* window)
{
g_return_if_fail (GTK_IS_WIDGET (window));
g_signal_connect (window, "delete-event",
- G_CALLBACK (delete_event_cb), NULL);
+ G_CALLBACK (old_style_gm_window_delete_event_cb), NULL);
}
+
+
/* Stolen from GDK */
#ifndef WIN32
static void
@@ -621,25 +647,25 @@ gdk_wmspec_change_state (gboolean add,
GdkAtom state1,
GdkAtom state2)
{
- GdkDisplay *display =
+ GdkDisplay *display =
gdk_screen_get_display (gdk_drawable_get_screen (GDK_DRAWABLE (window)));
XEvent xev;
-
+
#define _NET_WM_STATE_REMOVE 0 /* remove/unset property */
#define _NET_WM_STATE_ADD 1 /* add/set property */
-#define _NET_WM_STATE_TOGGLE 2 /* toggle property */
-
+#define _NET_WM_STATE_TOGGLE 2 /* toggle property */
+
xev.xclient.type = ClientMessage;
xev.xclient.serial = 0;
xev.xclient.send_event = True;
xev.xclient.window = GDK_WINDOW_XID (window);
- xev.xclient.message_type =
+ xev.xclient.message_type =
gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_STATE");
xev.xclient.format = 32;
xev.xclient.data.l[0] = add ? _NET_WM_STATE_ADD : _NET_WM_STATE_REMOVE;
xev.xclient.data.l[1] = gdk_x11_atom_to_xatom_for_display (display, state1);
xev.xclient.data.l[2] = gdk_x11_atom_to_xatom_for_display (display, state2);
-
+
XSendEvent (GDK_WINDOW_XDISPLAY (window),
GDK_WINDOW_XWINDOW (gdk_screen_get_root_window (gdk_drawable_get_screen (GDK_DRAWABLE (window)))),
False, SubstructureRedirectMask | SubstructureNotifyMask,
diff --git a/lib/gui/gmwindow.h b/lib/gui/gmwindow.h
index e441f0b..a064c42 100644
--- a/lib/gui/gmwindow.h
+++ b/lib/gui/gmwindow.h
@@ -108,7 +108,18 @@ void gm_window_set_hide_on_delete (GmWindow *window,
/** Check if the GmWindow will hide or event-relay on a delete-event
* @param window is the GmWindow
*/
-gboolean gm_window_get_hide_on_delete (GmWindow *window);
+gboolean gm_window_get_hide_on_escape (GmWindow *window);
+
+/** Check if the GmWindow will hide or event-relay on an escape event
+ * @param window is the GmWindow
+ */
+void gm_window_set_hide_on_escape (GmWindow *window,
+ gboolean hide_on_escape);
+
+/** Check if the GmWindow will hide or event-relay on an escape event
+ * @param window is the GmWindow
+ */
+gboolean gm_window_get_hide_on_escape (GmWindow *window);
/** Makes sure the given window is always on top
* @param window is a GdkWindow
@@ -132,11 +143,12 @@ void gm_window_show (GtkWidget* window);
*/
void gm_window_hide (GtkWidget* window);
-/** Make the window only be hidden on delete
+/** Hide on delete the given window : only for old-style GMWindows
* @param window is a GtkWindow
*/
void gm_window_hide_on_delete (GtkWidget* window);
+
/* GObject boilerplate */
#define GM_TYPE_WINDOW (gm_window_get_type ())
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]