[maemo-commits] [maemo-commits] r9825 - in projects/haf/branches/maemo-af-desktop/hildon-desktop: . libhildonwm src

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Tue Feb 13 16:22:58 EET 2007
Author: moimart
Date: 2007-02-13 16:22:57 +0200 (Tue, 13 Feb 2007)
New Revision: 9825

Modified:
   projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog
   projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildonwm/hd-wm.c
   projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-panel-window-dialog.c
Log:

	* src/hd-panel-window-dialog.c:
        - Connected to fullscreen libhildonwm's signal
        * libhildonwm/hd-wm.c:
        - Added fullscreen signal.
        - Added checking of fullscreen for specific watched window.
	* ChangeLog updated.



Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog
===================================================================
--- projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog	2007-02-13 13:40:23 UTC (rev 9824)
+++ projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog	2007-02-13 14:22:57 UTC (rev 9825)
@@ -1,5 +1,13 @@
 2007-02-13  Moises Martinez  <moises.martinez at nokia.com>
 
+	* src/hd-panel-window-dialog.c:
+	- Connected to fullscreen libhildonwm's signal
+	* libhildonwm/hd-wm.c:
+	- Added fullscreen signal.
+	- Added checking of fullscreen for specific watched window.
+	
+2007-02-13  Moises Martinez  <moises.martinez at nokia.com>
+
 	* libhildondesktop/statusbar-item-socket.c:
 	* libhildondesktop/hildon-desktop-panel-expandable.c:
 	- Use gdk_window_set_back_pixmap for getting the proper background.

Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildonwm/hd-wm.c
===================================================================
--- projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildonwm/hd-wm.c	2007-02-13 13:40:23 UTC (rev 9824)
+++ projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildonwm/hd-wm.c	2007-02-13 14:22:57 UTC (rev 9825)
@@ -114,6 +114,7 @@
   HDWM_WORK_AREA_CHANGED_SIGNAL,
   HDWM_SHOW_A_MENU_SIGNAL,
   HDWM_APPLICATION_STARTING_SIGNAL,
+  HDWM_FULLSCREEN,
   HDWM_SIGNALS
 };
 
@@ -147,6 +148,9 @@
 static gboolean
 hd_wm_relaunch_timeout (gpointer data);
 
+	static void 
+hd_wm_check_net_state (HDWM *hdwm, HDWMWatchedWindow *win);
+
 struct xwinv
 {
   Window *wins;
@@ -715,6 +719,17 @@
                      1,
                      G_TYPE_STRING);
 
+  hdwm_signals[HDWM_FULLSCREEN] = 
+	g_signal_new("fullscreen",
+		     G_OBJECT_CLASS_TYPE(object_class),
+		     G_SIGNAL_RUN_LAST,
+		     G_STRUCT_OFFSET (HDWMClass,show_menu),
+		     NULL, NULL,
+		     g_cclosure_marshal_VOID__BOOLEAN,
+		     G_TYPE_NONE,
+		     1,
+		     G_TYPE_BOOLEAN);
+
 }
 
 static void hd_wm_register_object_path (HDWM *hdwm,
@@ -1215,6 +1230,8 @@
       const gchar * service = hd_wm_watchable_app_get_service (app);
       
       hd_wm_top_service (service);
+
+      hd_wm_check_net_state (hdwm,hdwm->priv->last_active_window);
     }
     else
       hd_wm_top_desktop ();
@@ -1252,6 +1269,8 @@
    * this breaks the AS menu focus.
    */
   hdwm->priv->active_window = NULL;
+
+  g_signal_emit_by_name (hdwm, "fullscreen", FALSE);
 }
 
 
@@ -2097,6 +2116,44 @@
   return FALSE;  
 }
 
+static void 
+hd_wm_check_net_state (HDWM *hdwm, HDWMWatchedWindow *win)
+{
+  Window xid = hd_wm_watched_window_get_x_win (win);
+  unsigned long n;
+  unsigned long extra;
+  int           format, status, i;
+  Atom          realType, *value = NULL;
+
+  status = XGetWindowProperty(GDK_DISPLAY (), xid,
+                              hdwm->priv->atoms[HD_ATOM_NET_WM_STATE],
+                              0L, 1000000L,
+                              0, XA_ATOM, &realType, &format,
+                              &n, &extra, (unsigned char **) &value);
+
+  if (status == Success)
+  {
+    if (realType == XA_ATOM && format == 32 && n > 0)
+    {
+      for (i=0; i < n; i++)
+        if (value[i] && value[i] == hdwm->priv->atoms[HD_ATOM_NET_WM_STATE_FULLSCREEN])
+        {
+          if (value) XFree(value);
+          g_signal_emit_by_name (hdwm,"fullscreen",TRUE);
+	  g_debug ("FULLSCREEN ON %d",(GdkNativeWindow)xid);
+	  return;
+        }
+    }
+  }
+
+  if (value)
+    XFree(value);	      
+
+  g_signal_emit_by_name (hdwm,"fullscreen",FALSE);
+  g_debug ("FULLSCREEN OFF");
+
+}
+
 /* Main event filter  */
 
 static GdkFilterReturn
@@ -2273,6 +2330,9 @@
     if (!win)
       return GDK_FILTER_CONTINUE;
 
+    if (prop->atom == hdwm->priv->atoms[HD_ATOM_NET_WM_STATE])
+      hd_wm_check_net_state (hdwm, win);
+    else
     if (prop->atom == hdwm->priv->atoms[HD_ATOM_WM_NAME] || 
         prop->atom == hdwm->priv->atoms[HD_ATOM_MB_WIN_SUB_NAME] || 
 	prop->atom == hdwm->priv->atoms[HD_ATOM_NET_WM_NAME])

Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-panel-window-dialog.c
===================================================================
--- projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-panel-window-dialog.c	2007-02-13 13:40:23 UTC (rev 9824)
+++ projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-panel-window-dialog.c	2007-02-13 14:22:57 UTC (rev 9825)
@@ -31,6 +31,7 @@
 #include <gtk/gtk.h>
 
 #include <libhildondesktop/hildon-desktop-panel-expandable.h>
+#include <libhildonwm/hd-wm.h>
 #include "hd-panel-window-dialog.h"
 
 #define HD_PANEL_WINDOW_DIALOG_GET_PRIVATE(obj) \
@@ -92,6 +93,17 @@
   gtk_widget_set_name (GTK_BIN (widget)->child, HD_PANEL_WINDOW_DIALOG_BUTTON_NAME);
 }
 
+static void 
+hd_panel_window_dialog_fullscreen (HDWM *hdwm, gboolean fullscreen, gpointer _data)
+{
+  GtkWidget *window = GTK_WIDGET (_data);
+
+  if (!fullscreen)
+    gtk_widget_show (window);
+  else
+    gtk_widget_hide (window);
+}
+
 static GObject *
 hd_panel_window_dialog_constructor (GType gtype,
                              guint n_params,
@@ -101,6 +113,8 @@
 #ifdef HD_PANEL_WINDOW_DIALOG_NEW_THEME
   HildonDesktopPanelWindowOrientation orientation;
 #endif
+
+  HDWM *hdwm = hd_wm_get_singleton ();
   
   object = G_OBJECT_CLASS (hd_panel_window_dialog_parent_class)->constructor (gtype,
                                                                        n_params,
@@ -111,6 +125,11 @@
                     G_CALLBACK (hd_panel_window_dialog_cadd),
                     NULL);
 
+  g_signal_connect (G_OBJECT (hdwm),
+		    "fullscreen",
+		    G_CALLBACK (hd_panel_window_dialog_fullscreen),
+		    (gpointer)object);
+
 #ifdef HD_PANEL_WINDOW_DIALOG_NEW_THEME
   g_object_get (G_OBJECT (object), 
                 "orientation", &orientation,


More information about the maemo-commits mailing list