[mutter] [MetaWindow] Added boolean demands-attention property



commit 2a14deab0c616064c7130f74245be0496b56d4e4
Author: Tomas Frydrych <tf linux intel com>
Date:   Tue Nov 17 10:02:06 2009 +0000

    [MetaWindow] Added boolean demands-attention property
    
    https://bugzilla.gnome.org/show_bug.cgi?id=588065

 src/core/window.c |   39 +++++++++++++++++++++++++++++++++++----
 1 files changed, 35 insertions(+), 4 deletions(-)
---
diff --git a/src/core/window.c b/src/core/window.c
index e1a2c76..3faab01 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -138,7 +138,8 @@ enum {
   PROP_DECORATED,
   PROP_FULLSCREEN,
   PROP_WINDOW_TYPE,
-  PROP_USER_TIME
+  PROP_USER_TIME,
+  PROP_DEMANDS_ATTENTION
 };
 
 enum
@@ -208,6 +209,9 @@ meta_window_get_property(GObject         *object,
     case PROP_USER_TIME:
       g_value_set_uint (value, win->net_wm_user_time);
       break;
+    case PROP_DEMANDS_ATTENTION:
+      g_value_set_boolean (value, win->wm_state_demands_attention);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -296,6 +300,14 @@ meta_window_class_init (MetaWindowClass *klass)
                                                       0,
                                                       G_PARAM_READABLE));
 
+  g_object_class_install_property (object_class,
+                                   PROP_DEMANDS_ATTENTION,
+                                   g_param_spec_boolean ("demands-attention",
+                                                         "Demands Attention",
+                                                         "Whether the window has _NET_WM_STATE_DEMANDS_ATTENTION set",
+                                                         FALSE,
+                                                         G_PARAM_READABLE));
+
   window_signals[WORKSPACE_CHANGED] =
     g_signal_new ("workspace-changed",
                   G_TYPE_FROM_CLASS (object_class),
@@ -2399,6 +2411,7 @@ meta_window_show (MetaWindow *window)
   MetaWindow *focus_window;
   gboolean toplevel_was_mapped;
   gboolean toplevel_now_mapped;
+  gboolean notify_demands_attention = FALSE;
 
   meta_topic (META_DEBUG_WINDOW_STATE,
               "Showing window %s, shaded: %d iconic: %d placed: %d\n",
@@ -2533,7 +2546,13 @@ meta_window_show (MetaWindow *window)
        * which we are going to call ourselves here a few lines down.
        */
       if (overlap)
-        window->wm_state_demands_attention = TRUE;
+        {
+          if (!window->wm_state_demands_attention)
+            {
+              window->wm_state_demands_attention = TRUE;
+              notify_demands_attention = TRUE;
+            }
+        }
     }
 
   /* Shaded means the frame is mapped but the window is not */
@@ -2651,6 +2670,9 @@ meta_window_show (MetaWindow *window)
    * See http://bugzilla.gnome.org/show_bug.cgi?id=573922
    */
   window->initial_timestamp_set = FALSE;
+
+  if (notify_demands_attention)
+    g_object_notify (G_OBJECT (window), "demands-attention");
 }
 
 static void
@@ -8594,6 +8616,10 @@ meta_window_set_demands_attention (MetaWindow *window)
   gboolean obscured = FALSE;
 
   MetaWorkspace *workspace = window->screen->active_workspace;
+
+  if (window->wm_state_demands_attention)
+    return;
+
   if (workspace!=window->workspace)
     {
       /* windows on other workspaces are necessarily obscured */
@@ -8637,6 +8663,7 @@ meta_window_set_demands_attention (MetaWindow *window)
 
       window->wm_state_demands_attention = TRUE;
       set_net_wm_state (window);
+      g_object_notify (G_OBJECT (window), "demands-attention");
     }
   else
     {
@@ -8655,8 +8682,12 @@ meta_window_unset_demands_attention (MetaWindow *window)
   meta_topic (META_DEBUG_WINDOW_OPS,
       "Marking %s as not needing attention\n", window->desc);
 
-  window->wm_state_demands_attention = FALSE;
-  set_net_wm_state (window);
+  if (window->wm_state_demands_attention)
+    {
+      window->wm_state_demands_attention = FALSE;
+      set_net_wm_state (window);
+      g_object_notify (G_OBJECT (window), "demands-attention");
+    }
 }
 
 MetaFrame *



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]