]> Pileus Git - ~andy/gtk/commitdiff
Implement type hints and use them to determine which windows should be
authorRichard Hult <richard@imendio.com>
Wed, 19 Jul 2006 09:13:24 +0000 (09:13 +0000)
committerRichard Hult <rhult@src.gnome.org>
Wed, 19 Jul 2006 09:13:24 +0000 (09:13 +0000)
2006-07-19  Richard Hult  <richard@imendio.com>

* gdk/quartz/gdkwindow-quartz.c (gdk_window_impl_quartz_init)
(gdk_window_set_type_hint, gdk_window_get_type_hint):
* gdk/quartz/GdkQuartzWindow.c
([GdkQuartzWindow -canBecomeMainWindow])
([GdkQuartzWindow -canBecomeKeyWindow]): Implement type hints and
use them to determine which windows should be allowed to become
main and key windows.

ChangeLog
ChangeLog.pre-2-10
gdk/quartz/GdkQuartzWindow.c
gdk/quartz/gdkwindow-quartz.c
gdk/quartz/gdkwindow-quartz.h

index 7b832ebfdae1f26e436389f5c266aae89ac3b4e6..3efdbad96628d6ebaf1417131798e73b6301f5df 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2006-07-19  Richard Hult  <richard@imendio.com>
+
+       * gdk/quartz/gdkwindow-quartz.c (gdk_window_impl_quartz_init)
+       (gdk_window_set_type_hint, gdk_window_get_type_hint):
+       * gdk/quartz/GdkQuartzWindow.c
+       ([GdkQuartzWindow -canBecomeMainWindow])
+       ([GdkQuartzWindow -canBecomeKeyWindow]): Implement type hints and
+       use them to determine which windows should be allowed to become
+       main and key windows.
+
 2006-07-19  Richard Hult  <richard@imendio.com>
 
        * gdk/quartz/gdkwindow-quartz.c:
index 7b832ebfdae1f26e436389f5c266aae89ac3b4e6..3efdbad96628d6ebaf1417131798e73b6301f5df 100644 (file)
@@ -1,3 +1,13 @@
+2006-07-19  Richard Hult  <richard@imendio.com>
+
+       * gdk/quartz/gdkwindow-quartz.c (gdk_window_impl_quartz_init)
+       (gdk_window_set_type_hint, gdk_window_get_type_hint):
+       * gdk/quartz/GdkQuartzWindow.c
+       ([GdkQuartzWindow -canBecomeMainWindow])
+       ([GdkQuartzWindow -canBecomeKeyWindow]): Implement type hints and
+       use them to determine which windows should be allowed to become
+       main and key windows.
+
 2006-07-19  Richard Hult  <richard@imendio.com>
 
        * gdk/quartz/gdkwindow-quartz.c:
index cc6d9beb213091de374680befe204fc030f81827..1c03de0bf832e36a1e3c866e108bd9c296d4917e 100644 (file)
 
 -(BOOL)canBecomeMainWindow
 {
+  GdkWindow *window = [[self contentView] gdkWindow];
+  GdkWindowObject *private = (GdkWindowObject *)window;
+  GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
+
+  switch (impl->type_hint)
+    {
+    case GDK_WINDOW_TYPE_HINT_NORMAL:
+    case GDK_WINDOW_TYPE_HINT_DIALOG:
+      return YES;
+      
+    case GDK_WINDOW_TYPE_HINT_MENU:
+    case GDK_WINDOW_TYPE_HINT_TOOLBAR:
+    case GDK_WINDOW_TYPE_HINT_SPLASHSCREEN:
+    case GDK_WINDOW_TYPE_HINT_UTILITY:
+    case GDK_WINDOW_TYPE_HINT_DOCK:
+    case GDK_WINDOW_TYPE_HINT_DESKTOP:
+    case GDK_WINDOW_TYPE_HINT_DROPDOWN_MENU:
+    case GDK_WINDOW_TYPE_HINT_POPUP_MENU:
+    case GDK_WINDOW_TYPE_HINT_TOOLTIP:
+    case GDK_WINDOW_TYPE_HINT_NOTIFICATION:
+    case GDK_WINDOW_TYPE_HINT_COMBO:
+    case GDK_WINDOW_TYPE_HINT_DND:
+      return NO;
+    }
+  
   return YES;
 }
 
 -(BOOL)canBecomeKeyWindow
 {
+  GdkWindow *window = [[self contentView] gdkWindow];
+  GdkWindowObject *private = (GdkWindowObject *)window;
+  GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
+
+  switch (impl->type_hint)
+    {
+    case GDK_WINDOW_TYPE_HINT_NORMAL:
+    case GDK_WINDOW_TYPE_HINT_DIALOG:
+    case GDK_WINDOW_TYPE_HINT_MENU:
+    case GDK_WINDOW_TYPE_HINT_TOOLBAR:
+    case GDK_WINDOW_TYPE_HINT_UTILITY:
+    case GDK_WINDOW_TYPE_HINT_DOCK:
+    case GDK_WINDOW_TYPE_HINT_DESKTOP:
+    case GDK_WINDOW_TYPE_HINT_DROPDOWN_MENU:
+    case GDK_WINDOW_TYPE_HINT_POPUP_MENU:
+    case GDK_WINDOW_TYPE_HINT_COMBO:
+      return YES;
+      
+    case GDK_WINDOW_TYPE_HINT_SPLASHSCREEN:
+    case GDK_WINDOW_TYPE_HINT_TOOLTIP:
+    case GDK_WINDOW_TYPE_HINT_NOTIFICATION:
+    case GDK_WINDOW_TYPE_HINT_DND:
+      return NO;
+    }
+  
   return YES;
 }
 
index 2114f3987b45a432873125592e4aa5620bf354c4..a2497de7fbe044739dca77798b6751e4eb7c7552 100644 (file)
@@ -134,6 +134,7 @@ gdk_window_impl_quartz_init (GdkWindowImplQuartz *impl)
 {
   impl->width = 1;
   impl->height = 1;
+  impl->type_hint = GDK_WINDOW_TYPE_HINT_NORMAL;
 }
 
 static void
@@ -300,13 +301,10 @@ gdk_window_new (GdkWindow     *parent,
   GdkDrawableImplQuartz *draw_impl;
   GdkVisual *visual;
 
-  GDK_QUARTZ_ALLOC_POOL;
-
   if (parent && GDK_WINDOW_DESTROYED (parent))
-    {
-      GDK_QUARTZ_RELEASE_POOL;
-      return NULL;
-    }
+    return NULL;
+
+  GDK_QUARTZ_ALLOC_POOL;
 
   if (!parent)
     parent = _gdk_root;
@@ -562,13 +560,12 @@ show_window_internal (GdkWindow *window, gboolean raise)
   GdkWindowObject *private;
   GdkWindowImplQuartz *impl;
 
-  private = (GdkWindowObject *)window;
-
-  if (private->destroyed)
+  if (GDK_WINDOW_DESTROYED (window))
     return;
 
   GDK_QUARTZ_ALLOC_POOL;
 
+  private = (GdkWindowObject *)window;
   impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
 
   /* FIXME: We need to raise the window (move it to the top in the list) */
@@ -1245,14 +1242,19 @@ gdk_window_set_type_hint (GdkWindow        *window,
 {
   g_return_if_fail (GDK_IS_WINDOW (window));
 
-  /* FIXME: Implement */
+  if (GDK_WINDOW_DESTROYED (window))
+    return;
+
+  GDK_WINDOW_IMPL_QUARTZ (((GdkWindowObject *) window)->impl)->type_hint = hint;
 }
 
 GdkWindowTypeHint
 gdk_window_get_type_hint (GdkWindow *window)
 {
-  /* FIXME: Implement */
-  return GDK_WINDOW_TYPE_HINT_NORMAL;
+  if (GDK_WINDOW_DESTROYED (window))
+    return GDK_WINDOW_TYPE_HINT_NORMAL;
+  
+  return GDK_WINDOW_IMPL_QUARTZ (((GdkWindowObject *) window)->impl)->type_hint;
 }
 
 void
index 1bbc3cd35c0d6835f3ab5a2e8df7be506d8654ca..ccf85bef478dd381e46307f9d09ab52777f8a0d5 100644 (file)
@@ -52,6 +52,8 @@ struct _GdkWindowImplQuartz
   NSTrackingRectTag tracking_rect;
   GdkQuartzView *view;
 
+  GdkWindowTypeHint type_hint;
+
   /* This is the autorelease pool which is retained
    * while the context is being held 
    */