[maemo-commits] [maemo-commits] r10628 - in projects/haf/trunk/hildon-desktop: . libhildondesktop

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Mon Mar 19 18:10:22 EET 2007
Author: moimart
Date: 2007-03-19 18:10:20 +0200 (Mon, 19 Mar 2007)
New Revision: 10628

Modified:
   projects/haf/trunk/hildon-desktop/ChangeLog
   projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-panel-window-dialog.c
Log:

	* libhildondesktop/hildon-desktop-panel-window-dialog.c:
        - Check the WM we are running: if not matchbox set the window dialog
        as a dock window.
	* ChangeLog updated.



Modified: projects/haf/trunk/hildon-desktop/ChangeLog
===================================================================
--- projects/haf/trunk/hildon-desktop/ChangeLog	2007-03-19 13:41:48 UTC (rev 10627)
+++ projects/haf/trunk/hildon-desktop/ChangeLog	2007-03-19 16:10:20 UTC (rev 10628)
@@ -1,3 +1,9 @@
+2007-03-19  Moises Martinez  <moises.martinez at nokia.com>
+
+	* libhildondesktop/hildon-desktop-panel-window-dialog.c:
+	- Check the WM we are running: if not matchbox set the window dialog
+	as a dock window.
+
 2007-03-14  Lucas Rocha  <lucas.rocha at nokia.com>
 
 	* debian/control, debian/changelog, src/hd-desktop.c,

Modified: projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-panel-window-dialog.c
===================================================================
--- projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-panel-window-dialog.c	2007-03-19 13:41:48 UTC (rev 10627)
+++ projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-panel-window-dialog.c	2007-03-19 16:10:20 UTC (rev 10628)
@@ -26,6 +26,8 @@
 #include <gtk/gtk.h>
 #include <gdk/gdk.h>
 #include <libhildonwm/hd-wm.h>
+#include <X11/Xatom.h>
+#include <gdk/gdkx.h>
 
 #include "hildon-desktop-panel-window-dialog.h"
 #include "hildon-desktop-panel-expandable.h"
@@ -93,6 +95,53 @@
   /* FIXME: what do we do with focus??? */
 }
 
+static gchar *
+hildon_desktop_get_current_wm_name (HildonDesktopPanelWindowDialog *dialog)
+{
+  Atom           atom_utf8_string, atom_wm_name, atom_check, type;
+  int            result, format;
+  gchar          *val, *retval;
+  unsigned long  nitems, bytes_after;
+  Window        *support_xwin = NULL;
+  Display	*dpy;
+
+  dpy = GDK_DISPLAY ();
+
+  atom_check = XInternAtom (dpy, "_NET_SUPPORTING_WM_CHECK", False);
+
+  XGetWindowProperty (dpy, 
+		      GDK_WINDOW_XID (gdk_get_default_root_window ()),
+		      atom_check,
+		      0, 16L, False, XA_WINDOW, &type, &format,
+		      &nitems, &bytes_after, (unsigned char **)&support_xwin);
+
+  if (support_xwin == NULL)
+      return NULL;
+
+  atom_utf8_string = XInternAtom (dpy, "UTF8_STRING", False);
+  atom_wm_name     = XInternAtom (dpy, "_NET_WM_NAME", False);
+
+  result = XGetWindowProperty (dpy, *support_xwin, atom_wm_name,
+			       0, 1000L,False, atom_utf8_string,
+			       &type, &format, &nitems,
+			       &bytes_after, (unsigned char **)&val);
+  if (result != Success)
+    return NULL;
+
+  if (type != atom_utf8_string || format !=8 || nitems == 0)
+  {
+    if (val) 
+      XFree (val);
+    return NULL;
+  }
+
+  retval = g_strdup (val);
+
+  XFree (val);
+
+  return retval;
+}
+
 static GObject *  
 hildon_desktop_panel_window_dialog_constructor (GType gtype,
 			                 guint n_params,
@@ -103,19 +152,16 @@
   GtkWidget *widget;
   GtkContainer *parent = NULL;
   gint orientation;
+  gchar *wm_name;
   
   object = G_OBJECT_CLASS (hildon_desktop_panel_window_dialog_parent_class)->constructor (gtype,
 		  				                                   	  n_params,
 						                                   	  params);
-
   widget = GTK_WIDGET (object);
   window = HILDON_DESKTOP_PANEL_WINDOW_DIALOG (object);
 
   GTK_WINDOW (window)->type = GTK_WINDOW_TOPLEVEL;
 
-  gtk_window_set_type_hint (GTK_WINDOW (window), GDK_WINDOW_TYPE_HINT_DIALOG);
-  gtk_window_set_decorated (GTK_WINDOW (window), FALSE);
-
   if (HILDON_DESKTOP_WINDOW (window)->container != NULL) 
   {
     parent = GTK_CONTAINER (GTK_WIDGET (HILDON_DESKTOP_WINDOW (window)->container)->parent);
@@ -148,11 +194,27 @@
   
   gtk_widget_show (GTK_WIDGET (HILDON_DESKTOP_WINDOW (window)->container));
 
-  gtk_widget_realize (GTK_WIDGET (window));
-  
-  gdk_window_set_transient_for (GTK_WIDGET (window)->window, gdk_get_default_root_window ());
-  gtk_window_set_accept_focus (GTK_WINDOW (window), FALSE);
+  wm_name = hildon_desktop_get_current_wm_name (window);
 
+  if (g_str_equal (wm_name, "matchbox"))
+  {
+    gtk_window_set_type_hint (GTK_WINDOW (window), GDK_WINDOW_TYPE_HINT_DIALOG);
+    gtk_window_set_decorated (GTK_WINDOW (window), FALSE);
+
+    gtk_widget_realize (GTK_WIDGET (window));
+
+    gdk_window_set_transient_for (GTK_WIDGET (window)->window, gdk_get_default_root_window ());
+    gtk_window_set_accept_focus (GTK_WINDOW (window), FALSE);
+  }
+  else
+  {
+    gtk_window_set_type_hint (GTK_WINDOW (window), GDK_WINDOW_TYPE_HINT_DOCK);
+
+    gtk_widget_realize (GTK_WIDGET (window));
+  }
+
+  g_free (wm_name);
+ 
   gtk_widget_pop_composite_child ();
 
   g_signal_connect (window->priv->hdwm,


More information about the maemo-commits mailing list