summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Hult <richard@imendio.com>2007-06-04 20:45:30 +0000
committerRichard Hult <rhult@src.gnome.org>2007-06-04 20:45:30 +0000
commit72469142a08b254d4345329fe0fb4746e9b6a186 (patch)
tree87a7c71b9f02253b871d60c775a4f097bf6691bf
parent60be3caaaaf0347e2736cc0bf200dd12f8b39ce1 (diff)
downloadgdk-pixbuf-72469142a08b254d4345329fe0fb4746e9b6a186.tar.gz
* gdk/quartz/gdkwindow-quartz.c: Implement simple versions of
2007-06-04 Richard Hult <richard@imendio.com> * gdk/quartz/GdkQuartzWindow.c: * gdk/quartz/gdkwindow-quartz.c: Implement simple versions of gdk_window_set_accept_focus and gdk_window_set_focus_on_map. svn path=/trunk/; revision=18038
-rw-r--r--ChangeLog6
-rw-r--r--gdk/quartz/GdkQuartzWindow.c3
-rw-r--r--gdk/quartz/gdkwindow-quartz.c37
3 files changed, 43 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 748c3c143..a2b3d394a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
2007-06-04 Richard Hult <richard@imendio.com>
+ * gdk/quartz/GdkQuartzWindow.c: * gdk/quartz/gdkwindow-quartz.c:
+ Implement simple versions of gdk_window_set_accept_focus and
+ gdk_window_set_focus_on_map.
+
+2007-06-04 Richard Hult <richard@imendio.com>
+
* gdk/quartz/gdkwindow-quartz.c: (gdk_window_raise),
(gdk_window_raise): Implement.
diff --git a/gdk/quartz/GdkQuartzWindow.c b/gdk/quartz/GdkQuartzWindow.c
index 0004249ef..04fb48915 100644
--- a/gdk/quartz/GdkQuartzWindow.c
+++ b/gdk/quartz/GdkQuartzWindow.c
@@ -176,6 +176,9 @@
GdkWindowObject *private = (GdkWindowObject *)window;
GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
+ if (!private->accept_focus)
+ return NO;
+
/* FIXME: Is this right? If so, the switch shouldn't be needed. Need
* this + some tweaking to the event/grab code to get menus
* working...
diff --git a/gdk/quartz/gdkwindow-quartz.c b/gdk/quartz/gdkwindow-quartz.c
index 69b4c6cb5..fd01805f4 100644
--- a/gdk/quartz/gdkwindow-quartz.c
+++ b/gdk/quartz/gdkwindow-quartz.c
@@ -526,6 +526,9 @@ gdk_window_new (GdkWindow *parent,
private->parent = (GdkWindowObject *)parent;
+ private->accept_focus = TRUE;
+ private->focus_on_map = TRUE;
+
if (attributes_mask & GDK_WA_X)
private->x = attributes->x;
else
@@ -781,12 +784,16 @@ all_parents_shown (GdkWindowObject *private)
return FALSE;
}
+/* Note: the raise argument is not really used, it doesn't seem
+ * possible to show a window without raising it?
+ */
static void
show_window_internal (GdkWindow *window,
gboolean raise)
{
GdkWindowObject *private;
GdkWindowImplQuartz *impl;
+ gboolean focus_on_map;
if (GDK_WINDOW_DESTROYED (window))
return;
@@ -796,9 +803,21 @@ show_window_internal (GdkWindow *window,
private = (GdkWindowObject *)window;
impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
+ if (!GDK_WINDOW_IS_MAPPED (window))
+ focus_on_map = private->focus_on_map;
+ else
+ focus_on_map = TRUE;
+
if (impl->toplevel)
{
- [impl->toplevel orderFront:nil];
+ /* We should make the window not raise for !raise, but at least
+ * this will keep it from getting focused in that case.
+ */
+ if (private->accept_focus && focus_on_map && raise)
+ [impl->toplevel makeKeyAndOrderFront:nil];
+ else
+ [impl->toplevel orderFront:nil];
+
[impl->view setNeedsDisplay:YES];
}
else
@@ -1617,7 +1636,13 @@ void
gdk_window_set_accept_focus (GdkWindow *window,
gboolean accept_focus)
{
- /* FIXME: Implement */
+ GdkWindowObject *private;
+
+ g_return_if_fail (GDK_IS_WINDOW (window));
+
+ private = (GdkWindowObject *)window;
+
+ private->accept_focus = accept_focus != FALSE;
}
void
@@ -1654,7 +1679,13 @@ void
gdk_window_set_focus_on_map (GdkWindow *window,
gboolean focus_on_map)
{
- /* FIXME: Implement */
+ GdkWindowObject *private;
+
+ g_return_if_fail (GDK_IS_WINDOW (window));
+
+ private = (GdkWindowObject *)window;
+
+ private->focus_on_map = focus_on_map != FALSE;
}
void