r403 - trunk/src/target/OM-2007/openmoko-libs/libmokoui

mickey at gta01.hmw-consulting.de mickey at gta01.hmw-consulting.de
Wed Dec 13 11:22:01 CET 2006


Author: mickey
Date: 2006-12-13 11:22:00 +0100 (Wed, 13 Dec 2006)
New Revision: 403

Modified:
   trunk/src/target/OM-2007/openmoko-libs/libmokoui/moko-finger-tool-box.c
   trunk/src/target/OM-2007/openmoko-libs/libmokoui/moko-finger-wheel.c
Log:
mokoui: fix MokoFingerWheel and MokoFingerToolBox z-order
Both windows are now embedded in GTK_WINDOW_TOPLEVEL instead of GTK_WINDOW_POPUP
and the window manager is instructed how to z-order sort them by using
gtk_window_set_transient for. We may have to adjust this logic a bit when we
have more windows belonging to one application using the wheel.


Modified: trunk/src/target/OM-2007/openmoko-libs/libmokoui/moko-finger-tool-box.c
===================================================================
--- trunk/src/target/OM-2007/openmoko-libs/libmokoui/moko-finger-tool-box.c	2006-12-13 09:28:14 UTC (rev 402)
+++ trunk/src/target/OM-2007/openmoko-libs/libmokoui/moko-finger-tool-box.c	2006-12-13 10:22:00 UTC (rev 403)
@@ -224,12 +224,14 @@
     MokoFingerToolBoxPrivate* priv = MOKO_FINGER_TOOL_BOX_GET_PRIVATE(widget);
     if ( !priv->popup )
     {
-        priv->popup = gtk_window_new(GTK_WINDOW_POPUP);
+        priv->popup = gtk_window_new(GTK_WINDOW_TOPLEVEL); //GTK_WINDOW_POPUP
         gtk_container_add( GTK_CONTAINER(priv->popup), widget );
     }
 
     MokoWindow* window = moko_application_get_main_window( moko_application_get_instance() );
     g_return_if_fail( MOKO_IS_FINGER_WINDOW(window) );
+    //FIXME set also transient for all other windows belonging to this app?
+    gtk_window_set_transient_for( priv->popup, window );
     GtkAllocation geometry;
     gboolean valid = moko_finger_window_get_geometry_hint( MOKO_FINGER_WINDOW(window), widget, &geometry );
     g_signal_connect_after( G_OBJECT(widget), "size_allocate", G_CALLBACK(cb_size_allocate), widget );
@@ -239,7 +241,8 @@
 
     gtk_widget_show( priv->popup );
     MokoFingerWheel* wheel = moko_finger_window_get_wheel( MOKO_FINGER_WINDOW(window) );
-    if ( wheel && GTK_WIDGET_VISIBLE(wheel) ) moko_finger_wheel_raise( wheel );
+    if ( wheel && GTK_WIDGET_VISIBLE(wheel) )
+        moko_finger_wheel_set_transient_for( wheel, priv->popup ); //moko_finger_wheel_raise( wheel );
 }
 
 static void moko_finger_tool_box_hide(GtkWidget* widget)

Modified: trunk/src/target/OM-2007/openmoko-libs/libmokoui/moko-finger-wheel.c
===================================================================
--- trunk/src/target/OM-2007/openmoko-libs/libmokoui/moko-finger-wheel.c	2006-12-13 09:28:14 UTC (rev 402)
+++ trunk/src/target/OM-2007/openmoko-libs/libmokoui/moko-finger-wheel.c	2006-12-13 10:22:00 UTC (rev 403)
@@ -209,13 +209,15 @@
     MokoFingerWheelPrivate* priv = MOKO_FINGER_WHEEL_GET_PRIVATE(widget);
     if ( !priv->popup )
     {
-        priv->popup = gtk_window_new(GTK_WINDOW_POPUP);
+        priv->popup = gtk_window_new(GTK_WINDOW_TOPLEVEL); // GTK_WINDOW_POPUP
         //gtk_window_set_decorated( priv->popup, FALSE );
         //FIXME Setting it to transparent is probably not necessary since we issue a mask anyway, right?
         //gtk_widget_set_name( GTK_WIDGET(priv->popup), "transparent" );
         gtk_container_add( GTK_CONTAINER(priv->popup), widget );
         MokoWindow* window = moko_application_get_main_window( moko_application_get_instance() );
         //FIXME check if it's a finger window
+        //FIXME set it not only transient for the main window, but also for other window belonging to this application
+        gtk_window_set_transient_for(priv->popup, window );
 
         GtkAllocation geometry;
         gboolean valid = moko_finger_window_get_geometry_hint( window, widget, &geometry );
@@ -292,6 +294,14 @@
     gdk_window_raise( GTK_WIDGET(priv->popup)->window );
 }
 
+void moko_finger_wheel_set_transient_for(MokoFingerWheel* self, GtkWindow* window)
+{
+    moko_debug( "moko_finger_wheel_set_transient_for" );
+    MokoFingerWheelPrivate* priv = MOKO_FINGER_WHEEL_GET_PRIVATE(self);
+    g_return_if_fail(priv->popup);
+    gtk_window_set_transient_for( priv->popup, window );
+}
+
 /**
  * @brief Caculate the area that user checked
  */





More information about the commitlog mailing list