diff options
-rw-r--r-- | ChangeLog | 19 | ||||
-rw-r--r-- | ChangeLog.pre-2-10 | 19 | ||||
-rw-r--r-- | ChangeLog.pre-2-8 | 19 | ||||
-rw-r--r-- | docs/reference/ChangeLog | 5 | ||||
-rw-r--r-- | docs/reference/gdk/gdk-sections.txt | 1 | ||||
-rw-r--r-- | docs/reference/gtk/gtk-sections.txt | 2 | ||||
-rw-r--r-- | gdk/gdk.symbols | 1 | ||||
-rw-r--r-- | gdk/gdkwindow.h | 2 | ||||
-rw-r--r-- | gdk/x11/gdkwindow-x11.c | 31 | ||||
-rw-r--r-- | gdk/x11/gdkwindow-x11.h | 1 | ||||
-rw-r--r-- | gtk/gtk.symbols | 2 | ||||
-rw-r--r-- | gtk/gtkwindow.c | 72 | ||||
-rw-r--r-- | gtk/gtkwindow.h | 3 |
13 files changed, 177 insertions, 0 deletions
@@ -16,6 +16,25 @@ 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. + +2005-06-17 Matthias Clasen <mclasen@redhat.com> + * gdk/gdkcursor.h: Define GDK_IS_CURSOR() and GDK_CURSOR(). * gdk/x11/gdkcursor-x11.c: diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 70de302199..6fd90d65c7 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -16,6 +16,25 @@ 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. + +2005-06-17 Matthias Clasen <mclasen@redhat.com> + * gdk/gdkcursor.h: Define GDK_IS_CURSOR() and GDK_CURSOR(). * gdk/x11/gdkcursor-x11.c: diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 70de302199..6fd90d65c7 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -16,6 +16,25 @@ 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. + +2005-06-17 Matthias Clasen <mclasen@redhat.com> + * gdk/gdkcursor.h: Define GDK_IS_CURSOR() and GDK_CURSOR(). * gdk/x11/gdkcursor-x11.c: diff --git a/docs/reference/ChangeLog b/docs/reference/ChangeLog index 47ba6c7233..84c4b391ca 100644 --- a/docs/reference/ChangeLog +++ b/docs/reference/ChangeLog @@ -1,3 +1,8 @@ +2005-06-17 Matthias Clasen <mclasen@redhat.com> + + * gtk/gtk-sections.txt: + * gdk/gdk-sections.txt: Add urgency hint API. + 2005-06-14 Matthias Clasen <mclasen@redhat.com> * gdk/gdk-sections.txt: Add new functions. diff --git a/docs/reference/gdk/gdk-sections.txt b/docs/reference/gdk/gdk-sections.txt index b2434a900e..36f64f15fa 100644 --- a/docs/reference/gdk/gdk-sections.txt +++ b/docs/reference/gdk/gdk-sections.txt @@ -705,6 +705,7 @@ gdk_window_set_modal_hint gdk_window_set_type_hint gdk_window_set_skip_taskbar_hint gdk_window_set_skip_pager_hint +gdk_window_set_urgency_hint gdk_window_get_position gdk_window_get_root_origin gdk_window_get_frame_extents diff --git a/docs/reference/gtk/gtk-sections.txt b/docs/reference/gtk/gtk-sections.txt index d45f75ce1d..d44124d303 100644 --- a/docs/reference/gtk/gtk-sections.txt +++ b/docs/reference/gtk/gtk-sections.txt @@ -4730,6 +4730,7 @@ gtk_window_set_role gtk_window_set_type_hint gtk_window_set_skip_taskbar_hint gtk_window_set_skip_pager_hint +gtk_window_set_urgency_hint gtk_window_set_accept_focus gtk_window_set_focus_on_map gtk_window_get_decorated @@ -4751,6 +4752,7 @@ gtk_window_get_transient_for gtk_window_get_type_hint gtk_window_get_skip_taskbar_hint gtk_window_get_skip_pager_hint +gtk_window_get_urgency_hint gtk_window_get_accept_focus gtk_window_get_focus_on_map gtk_window_move diff --git a/gdk/gdk.symbols b/gdk/gdk.symbols index c5f5239887..7839ece7c4 100644 --- a/gdk/gdk.symbols +++ b/gdk/gdk.symbols @@ -708,6 +708,7 @@ gdk_window_set_type_hint gdk_window_set_modal_hint gdk_window_set_skip_taskbar_hint gdk_window_set_skip_pager_hint +gdk_window_set_urgency_hint gdk_window_set_geometry_hints gdk_window_set_title gdk_window_set_role diff --git a/gdk/gdkwindow.h b/gdk/gdkwindow.h index 47e5620bc7..85ac3a537a 100644 --- a/gdk/gdkwindow.h +++ b/gdk/gdkwindow.h @@ -414,6 +414,8 @@ void gdk_window_set_skip_taskbar_hint (GdkWindow *window, gboolean skips_taskbar); void gdk_window_set_skip_pager_hint (GdkWindow *window, gboolean skips_pager); +void gdk_window_set_urgency_hint (GdkWindow *window, + gboolean urgent); void gdk_window_set_geometry_hints (GdkWindow *window, GdkGeometry *geometry, diff --git a/gdk/x11/gdkwindow-x11.c b/gdk/x11/gdkwindow-x11.c index 87957a3cf0..d939a6345d 100644 --- a/gdk/x11/gdkwindow-x11.c +++ b/gdk/x11/gdkwindow-x11.c @@ -1270,6 +1270,9 @@ update_wm_hints (GdkWindow *window, } else wm_hints.window_group = GDK_DISPLAY_X11 (display)->leader_window; + + if (toplevel->urgency_hint) + wm_hints.flags |= XUrgencyHint; XSetWMHints (GDK_WINDOW_XDISPLAY (window), GDK_WINDOW_XID (window), @@ -2343,6 +2346,34 @@ gdk_window_set_skip_pager_hint (GdkWindow *window, } /** + * gdk_window_set_urgency_hint: + * @window: a toplevel #GdkWindow + * @urgent: %TRUE if the window is urgent + * + * Toggles whether a window needs the user's + * urgent attention. + * + * Since: 2.8 + **/ +void +gdk_window_set_urgency_hint (GdkWindow *window, + gboolean urgent) +{ + GdkToplevelX11 *toplevel; + + g_return_if_fail (GDK_IS_WINDOW (window)); + g_return_if_fail (GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD); + + if (GDK_WINDOW_DESTROYED (window)) + return; + + toplevel = _gdk_x11_window_get_toplevel (window); + toplevel->urgency_hint = urgent; + + update_wm_hints (window, FALSE); +} + +/** * gdk_window_set_geometry_hints: * @window: a toplevel #GdkWindow * @geometry: geometry hints diff --git a/gdk/x11/gdkwindow-x11.h b/gdk/x11/gdkwindow-x11.h index 63e721e4e2..18fa23a057 100644 --- a/gdk/x11/gdkwindow-x11.h +++ b/gdk/x11/gdkwindow-x11.h @@ -111,6 +111,7 @@ struct _GdkToplevelX11 /* Set if we are requesting these hints */ guint skip_taskbar_hint : 1; guint skip_pager_hint : 1; + guint urgency_hint : 1; guint on_all_desktops : 1; /* _NET_WM_STICKY == 0xFFFFFFFF */ 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); |