when selecting one of a set of variable I/O configs for an AudioUnit so that its...
[ardour.git] / libs / gtkmm2ext / gtkapplication_quartz.mm
index b6d6b71d5d39202e7e1c78d133604d000485c551..045db98a95732ca6f2ca01dfdcb0e8f513b9d9fb 100644 (file)
  * Boston, MA 02111-1307, USA.
  */
 
+#include <sigc++/signal.h>
+#include <sigc++/slot.h>
+
+#include <string.h>
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+#include <gtkmm2ext/gtkapplication.h>
+#include <gtkmm2ext/gtkapplication-private.h>
+
 #import <AppKit/NSMenu.h>
 #import <AppKit/NSMenuItem.h>
 #import <AppKit/NSCell.h>
 #import <Foundation/NSString.h>
 #import <Foundation/NSNotification.h>
 
-#include <string.h>
-#include <gtk/gtk.h>
-#include <gdk/gdkkeysyms.h>
-#include <gtkmm2ext/gtkapplication.h>
-#include <gtkmm2ext/gtkapplication-private.h>
+#define UNUSED_PARAMETER(a) (void) (a)
 
 // #define DEBUG(format, ...) g_printerr ("%s: " format, G_STRFUNC, ## __VA_ARGS__)
 #define DEBUG(format, ...)
@@ -50,6 +55,8 @@
  *
  */
 
+static gint _exiting = 0;
+
 static guint
 gdk_quartz_keyval_to_ns_keyval (guint keyval)
 {
@@ -565,6 +572,7 @@ idle_call_activate (gpointer data)
 }
 - (void) activate:(id) sender
 {
+       UNUSED_PARAMETER(sender);
        g_idle_add (idle_call_activate, gtk_menu_item);
 }
 @end
@@ -623,7 +631,7 @@ get_menu_label_text (GtkWidget  *menu_item,
 }
 
 static gboolean
-accel_find_func (GtkAccelKey *key,
+accel_find_func (GtkAccelKey * /*key*/,
                 GClosure    *closure,
                 gpointer     data)
 {
@@ -799,9 +807,9 @@ cocoa_menu_item_update_accelerator (NSMenuItem *cocoa_item,
      is still done by GTK, so this is more cosmetic than it may 
      appear.
   */
-  
-  const gchar* ltxt = get_menu_label_text (widget, &label);
-  
+
+  get_menu_label_text (widget, &label);  
+
   if (GTK_IS_ACCEL_LABEL (label) &&
            GTK_ACCEL_LABEL (label)->accel_closure)
        {
@@ -885,15 +893,19 @@ cocoa_menu_item_update_accelerator (NSMenuItem *cocoa_item,
 }
 
 static void
-cocoa_menu_item_accel_changed (GtkAccelGroup   *accel_group,
-                               guint            keyval,
-                               GdkModifierType  modifier,
+cocoa_menu_item_accel_changed (GtkAccelGroup*   /*accel_group*/,
+                              guint            /*keyval*/,
+                               GdkModifierType /*modifier*/,
                                GClosure        *accel_closure,
                                GtkWidget       *widget)
 {
-  GNSMenuItem *cocoa_item = cocoa_menu_item_get (widget);
+  GNSMenuItem *cocoa_item;
   GtkWidget      *label;
 
+  if (_exiting) 
+    return;
+
+  cocoa_item = cocoa_menu_item_get (widget);
   get_menu_label_text (widget, &label);
 
   if (GTK_IS_ACCEL_LABEL (label) &&
@@ -942,10 +954,15 @@ cocoa_menu_item_update_accel_closure (GNSMenuItem *cocoa_item,
 
 static void
 cocoa_menu_item_notify_label (GObject    *object,
-                              GParamSpec *pspec,
-                              gpointer    data)
+                             GParamSpec *pspec,
+                             gpointer)
 {
-  GNSMenuItem *cocoa_item = cocoa_menu_item_get (GTK_WIDGET (object));
+  GNSMenuItem *cocoa_item;
+
+  if (_exiting) 
+    return;
+
+  cocoa_item = cocoa_menu_item_get (GTK_WIDGET (object));
 
   if (!strcmp (pspec->name, "label"))
     {
@@ -964,6 +981,9 @@ cocoa_menu_item_notify (GObject        *object,
                        GParamSpec     *pspec,
                        NSMenuItem *cocoa_item)
 {
+  if (_exiting)
+    return;
+
   if (!strcmp (pspec->name, "sensitive") ||
       !strcmp (pspec->name, "visible"))
     {
@@ -1075,8 +1095,8 @@ add_menu_item (NSMenu* cocoa_menu, GtkWidget* menu_item, int index)
 static void
 push_menu_shell_to_nsmenu (GtkMenuShell *menu_shell,
                           NSMenu*       cocoa_menu,
-                          gboolean      toplevel,
-                          gboolean      debug)
+                          gboolean      /*toplevel*/,
+                          gboolean      /*debug*/)
 {
   GList         *children;
   GList         *l;
@@ -1103,9 +1123,9 @@ push_menu_shell_to_nsmenu (GtkMenuShell *menu_shell,
 static gulong emission_hook_id = 0;
 
 static gboolean
-parent_set_emission_hook (GSignalInvocationHint *ihint,
-                         guint                  n_param_values,
-                         const GValue          *param_values,
+parent_set_emission_hook (GSignalInvocationHint* /*ihint*/,
+                         guint                  /*n_param_values*/,
+                         const GValue*          param_values,
                          gpointer               data)
 {
   GtkWidget *instance = (GtkWidget*) g_value_get_object (param_values);
@@ -1142,12 +1162,10 @@ parent_set_emission_hook (GSignalInvocationHint *ihint,
 }
 
 static void
-parent_set_emission_hook_remove (GtkWidget *widget,
-                                gpointer   data)
+parent_set_emission_hook_remove (GtkWidget*, gpointer)
 {
-  g_signal_remove_emission_hook (g_signal_lookup ("parent-set",
-                                                 GTK_TYPE_WIDGET),
-                                emission_hook_id);
+       g_signal_remove_emission_hook (g_signal_lookup ("parent-set", GTK_TYPE_WIDGET),
+                                      emission_hook_id);
 }
 
 /* Building "standard" Cocoa/OS X menus */
@@ -1172,6 +1190,7 @@ add_to_menubar (NSMenu *menu)
        return 0;
 }
 
+#if 0
 static int
 add_to_app_menu (NSMenu *menu)
 {
@@ -1182,17 +1201,7 @@ add_to_app_menu (NSMenu *menu)
        [dummyItem release];
        return 0;
 }
-
-static int
-add_to_window_menu (NSMenu *menu)
-{
-       NSMenuItem *dummyItem = [[NSMenuItem alloc] initWithTitle:@""
-                                action:nil keyEquivalent:@""];
-       [dummyItem setSubmenu:menu];
-       [_window_menu addItem:dummyItem];
-       [dummyItem release];
-       return 0;
-}
+#endif
 
 static int
 create_apple_menu ()
@@ -1239,6 +1248,18 @@ create_apple_menu ()
        return 0;
 }
 
+#if 0
+static int
+add_to_window_menu (NSMenu *menu)
+{
+       NSMenuItem *dummyItem = [[NSMenuItem alloc] initWithTitle:@""
+                                action:nil keyEquivalent:@""];
+       [dummyItem setSubmenu:menu];
+       [_window_menu addItem:dummyItem];
+       [dummyItem release];
+       return 0;
+}
+
 static int
 create_window_menu ()
 {   
@@ -1255,6 +1276,7 @@ create_window_menu ()
 
        return 0;
 }  
+#endif
 
 /*
  * public functions
@@ -1388,13 +1410,15 @@ namespace Gtk {
        return self;
 }
 
-- (void)appDidBecomeActive:(NSNotification *)notification
+- (void)appDidBecomeActive:(NSNotification *) notification
 {
+       UNUSED_PARAMETER(notification);
        Gtkmm2ext::Application::instance()->ActivationChanged (true);
 }
 
-- (void)appDidBecomeInactive:(NSNotification *)notification
+- (void)appDidBecomeInactive:(NSNotification *) notification
 {
+       UNUSED_PARAMETER(notification);
        Gtkmm2ext::Application::instance()->ActivationChanged (false);
 }
 
@@ -1404,14 +1428,16 @@ namespace Gtk {
 @end
 
 @implementation GtkApplicationDelegate
--(BOOL) application:(NSApplication*) theApplication openFile:(NSString*) file
+-(BOOL) application:(NSApplication*) app :(NSString*) file
 {
+       UNUSED_PARAMETER(app);
        Glib::ustring utf8_path ([file UTF8String]);
        Gtkmm2ext::Application::instance()->ShouldLoad (utf8_path);
        return 1;
 }
-- (NSApplicationTerminateReply) applicationShouldTerminate:(NSApplication *)sender
+- (NSApplicationTerminateReply) applicationShouldTerminate:(NSApplication *) app
 {
+       UNUSED_PARAMETER(app);
        Gtkmm2ext::Application::instance()->ShouldQuit ();
        return NSTerminateCancel;
 }
@@ -1449,10 +1475,18 @@ gtk_application_ready ()
 extern "C" void
 gtk_application_cleanup()
 {
-       if (_window_menu)
+       _exiting = 1;
+
+       if (_window_menu) {
                [ _window_menu release ];
-       if (_app_menu)
+               _window_menu = 0;
+       }
+       if (_app_menu) {
                [ _app_menu release ];
-       if (_main_menubar)
+               _app_menu = 0;
+       }
+       if (_main_menubar) {
                [ _main_menubar release ];
+               _main_menubar = 0;
+       }
 }