diff --git a/gdk/macos/gdkmacosdragsurface.c b/gdk/macos/gdkmacosdragsurface.c index 138d23d221..a9731473e9 100644 --- a/gdk/macos/gdkmacosdragsurface.c +++ b/gdk/macos/gdkmacosdragsurface.c @@ -96,12 +96,12 @@ _gdk_macos_drag_surface_constructed (GObject *object) defer:NO screen:screen]; + _gdk_macos_surface_set_native (self, window); + [window setOpaque:NO]; [window setBackgroundColor:[NSColor clearColor]]; [window setDecorated:NO]; - _gdk_macos_surface_set_native (self, window); - frame_clock = _gdk_frame_clock_idle_new (); gdk_surface_set_frame_clock (surface, frame_clock); g_object_unref (frame_clock); diff --git a/gdk/macos/gdkmacospopupsurface.c b/gdk/macos/gdkmacospopupsurface.c index ba84e57297..5bdd006184 100644 --- a/gdk/macos/gdkmacospopupsurface.c +++ b/gdk/macos/gdkmacospopupsurface.c @@ -52,6 +52,7 @@ gdk_macos_popup_surface_layout (GdkMacosPopupSurface *self, GdkRectangle bounds; GdkRectangle final_rect; int x, y; + int shadow_left, shadow_right, shadow_top, shadow_bottom; g_assert (GDK_IS_MACOS_POPUP_SURFACE (self)); g_assert (layout != NULL); @@ -68,10 +69,19 @@ gdk_macos_popup_surface_layout (GdkMacosPopupSurface *self, monitor = _gdk_macos_surface_get_best_monitor (GDK_MACOS_SURFACE (self)); gdk_macos_monitor_get_workarea (monitor, &bounds); + gdk_popup_layout_get_shadow_width (layout, + &shadow_left, + &shadow_right, + &shadow_top, + &shadow_bottom); + gdk_surface_layout_popup_helper (GDK_SURFACE (self), width, height, - 0, 0, 0, 0, /* shadow-left/right/top/bottom */ + shadow_left, + shadow_right, + shadow_top, + shadow_bottom, monitor, &bounds, self->layout, @@ -306,14 +316,14 @@ _gdk_macos_popup_surface_constructed (GObject *object) defer:NO screen:screen]; + _gdk_macos_surface_set_native (GDK_MACOS_SURFACE (self), window); + [window setOpaque:NO]; [window setBackgroundColor:[NSColor clearColor]]; [window setDecorated:NO]; [window setExcludedFromWindowsMenu:YES]; [window setLevel:NSPopUpMenuWindowLevel]; - _gdk_macos_surface_set_native (GDK_MACOS_SURFACE (self), window); - gdk_surface_set_frame_clock (surface, gdk_surface_get_frame_clock (surface->parent)); GDK_END_MACOS_ALLOC_POOL; diff --git a/gdk/macos/gdkmacostoplevelsurface.c b/gdk/macos/gdkmacostoplevelsurface.c index 93ff7dd3a7..6b4916a62c 100644 --- a/gdk/macos/gdkmacostoplevelsurface.c +++ b/gdk/macos/gdkmacostoplevelsurface.c @@ -591,11 +591,11 @@ _gdk_macos_toplevel_surface_constructed (GObject *object) defer:NO screen:screen]; + _gdk_macos_surface_set_native (GDK_MACOS_SURFACE (self), window); + /* Allow NSWindow to go fullscreen */ [window setCollectionBehavior:NSWindowCollectionBehaviorFullScreenPrimary]; - _gdk_macos_surface_set_native (GDK_MACOS_SURFACE (self), window); - frame_clock = _gdk_frame_clock_idle_new (); gdk_surface_set_frame_clock (surface, frame_clock); g_object_unref (frame_clock); diff --git a/gtk/gtkapplication-quartz.c b/gtk/gtkapplication-quartz.c index 272677ea0d..65ebc7d1f1 100644 --- a/gtk/gtkapplication-quartz.c +++ b/gtk/gtkapplication-quartz.c @@ -76,13 +76,19 @@ G_DEFINE_TYPE (GtkApplicationImplQuartz, gtk_application_impl_quartz, GTK_TYPE_A -(NSApplicationTerminateReply) applicationShouldTerminate:(NSApplication *)sender { - /* We have no way to give our message other than to pop up a dialog - * ourselves, which we should not do since the OS will already show - * one when we return NSTerminateNow. - * - * Just let the OS show the generic message... - */ - return quartz->quit_inhibit == 0 ? NSTerminateNow : NSTerminateCancel; + const gchar *quit_action_name = "quit"; + GActionGroup *action_group = G_ACTION_GROUP (quartz->impl.application); + + if (quartz->quit_inhibit != 0) + return NSTerminateCancel; + + if (g_action_group_has_action (action_group, quit_action_name)) + { + g_action_group_activate_action (action_group, quit_action_name, NULL); + return NSTerminateCancel; + } + + return NSTerminateNow; } -(void)application:(NSApplication *)theApplication openFiles:(NSArray *)filenames