diff options
author | Matthias Clasen <mclasen@redhat.com> | 2005-06-17 20:19:32 +0000 |
---|---|---|
committer | Matthias Clasen <matthiasc@src.gnome.org> | 2005-06-17 20:19:32 +0000 |
commit | 23fabedc9d8ce980618b356fdb4c4c9904a9ca2c (patch) | |
tree | a0afd50bf698ac4186730e9d931dc89f6296c074 /gtk | |
parent | 015b3c5671ae257b284e3f6df53273f69b9916de (diff) | |
download | gtk+-23fabedc9d8ce980618b356fdb4c4c9904a9ca2c.tar.gz |
Support the ICCCM urgency hint. (#61858, Havoc Pennington)
2005-06-17 Matthias Clasen <mclasen@redhat.com>
Support the ICCCM urgency hint. (#61858, Havoc Pennington)
* gtk/gtk.symbols:
* gtk/gtkwindow.[hc]: Add a GtkWindow::urgency-hint property
with getter and setter.
* gdk/gdk.symbols:
* gdk/gdkwindow.h:
* gdk/x11/gdkwindow-x11.c (gdk_window_set_urgency_hint):
Add a setter for the urgency hint.
* gdk/x11/gdkwindow-x11.h (struct _GdkToplevelX11): Store
urgency hint here.
* gdk/x11/gdkwindow-x11.c (update_wm_hints): Set the urgency
hint in the WM_HINTS property when appropriate.
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/gtk.symbols | 2 | ||||
-rw-r--r-- | gtk/gtkwindow.c | 72 | ||||
-rw-r--r-- | gtk/gtkwindow.h | 3 |
3 files changed, 77 insertions, 0 deletions
diff --git a/gtk/gtk.symbols b/gtk/gtk.symbols index 3a468e28e2..9fa563c28a 100644 --- a/gtk/gtk.symbols +++ b/gtk/gtk.symbols @@ -3912,6 +3912,7 @@ gtk_window_get_screen gtk_window_get_size gtk_window_get_skip_pager_hint gtk_window_get_skip_taskbar_hint +gtk_window_get_urgency_hint gtk_window_get_title gtk_window_get_transient_for gtk_window_get_type G_GNUC_CONST @@ -3975,6 +3976,7 @@ gtk_window_set_role gtk_window_set_screen gtk_window_set_skip_pager_hint gtk_window_set_skip_taskbar_hint +gtk_window_set_urgency_hint gtk_window_set_title gtk_window_set_transient_for gtk_window_set_type_hint diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index bee9590f20..5f7f4f499f 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -82,6 +82,7 @@ enum { PROP_TYPE_HINT, PROP_SKIP_TASKBAR_HINT, PROP_SKIP_PAGER_HINT, + PROP_URGENCY_HINT, PROP_ACCEPT_FOCUS, PROP_FOCUS_ON_MAP, PROP_DECORATED, @@ -165,6 +166,7 @@ struct _GtkWindowPrivate guint fullscreen_initially : 1; guint skips_taskbar : 1; guint skips_pager : 1; + guint urgent : 1; guint accept_focus : 1; guint focus_on_map : 1; }; @@ -580,6 +582,14 @@ gtk_window_class_init (GtkWindowClass *klass) FALSE, GTK_PARAM_READWRITE)); + g_object_class_install_property (gobject_class, + PROP_URGENCY_HINT, + g_param_spec_boolean ("urgency-hint", + P_("Urgent"), + P_("TRUE if the window should be brought to the user's attention."), + FALSE, + GTK_PARAM_READWRITE)); + /** * GtkWindow:accept-focus-hint: * @@ -868,6 +878,10 @@ gtk_window_set_property (GObject *object, gtk_window_set_skip_pager_hint (window, g_value_get_boolean (value)); break; + case PROP_URGENCY_HINT: + gtk_window_set_urgency_hint (window, + g_value_get_boolean (value)); + break; case PROP_ACCEPT_FOCUS: gtk_window_set_accept_focus (window, g_value_get_boolean (value)); @@ -968,6 +982,10 @@ gtk_window_get_property (GObject *object, g_value_set_boolean (value, gtk_window_get_skip_pager_hint (window)); break; + case PROP_URGENCY_HINT: + g_value_set_boolean (value, + gtk_window_get_urgency_hint (window)); + break; case PROP_ACCEPT_FOCUS: g_value_set_boolean (value, gtk_window_get_accept_focus (window)); @@ -2058,6 +2076,60 @@ gtk_window_get_skip_pager_hint (GtkWindow *window) } /** + * gtk_window_set_urgency_hint: + * @window: a #GtkWindow + * @setting: %TRUE to mark this window as urgent + * + * Windows may set a hint asking the desktop environment to draw + * the users attention to the window. This function sets this hint. + * + * Since: 2.8 + **/ +void +gtk_window_set_urgency_hint (GtkWindow *window, + gboolean setting) +{ + GtkWindowPrivate *priv; + + g_return_if_fail (GTK_IS_WINDOW (window)); + + priv = GTK_WINDOW_GET_PRIVATE (window); + + setting = setting != FALSE; + + if (priv->urgent != setting) + { + priv->urgent = setting; + if (GTK_WIDGET_REALIZED (window)) + gdk_window_set_urgency_hint (GTK_WIDGET (window)->window, + priv->urgent); + g_object_notify (G_OBJECT (window), "urgency-hint"); + } +} + +/** + * gtk_window_get_urgency_hint: + * @window: a #GtkWindow + * + * Gets the value set by gtk_window_set_urgency_hint() + * + * Return value: %TRUE if window is urgent + * + * Since: 2.8 + **/ +gboolean +gtk_window_get_urgency_hint (GtkWindow *window) +{ + GtkWindowPrivate *priv; + + g_return_val_if_fail (GTK_IS_WINDOW (window), FALSE); + + priv = GTK_WINDOW_GET_PRIVATE (window); + + return priv->urgent; +} + +/** * gtk_window_set_accept_focus: * @window: a #GtkWindow * @setting: %TRUE to let this window receive input focus diff --git a/gtk/gtkwindow.h b/gtk/gtkwindow.h index 177290f216..5c4e4a8d7a 100644 --- a/gtk/gtkwindow.h +++ b/gtk/gtkwindow.h @@ -204,6 +204,9 @@ gboolean gtk_window_get_skip_taskbar_hint (GtkWindow *window); void gtk_window_set_skip_pager_hint (GtkWindow *window, gboolean setting); gboolean gtk_window_get_skip_pager_hint (GtkWindow *window); +void gtk_window_set_urgency_hint (GtkWindow *window, + gboolean setting); +gboolean gtk_window_get_urgency_hint (GtkWindow *window); void gtk_window_set_accept_focus (GtkWindow *window, gboolean setting); gboolean gtk_window_get_accept_focus (GtkWindow *window); |