From c2b901dfe9cd0cc9392401feb780e8918d20bbd8 Mon Sep 17 00:00:00 2001 From: James Newton Date: Fri, 16 Nov 2007 23:11:35 +0000 Subject: [PATCH] Adjusted the menu code in an attempt to make it work better on leopard. Removed the idle_add wrapper for on_quit and moved the idle_add wrapping into the sync-menu code instead. --- TODO.osx | 6 ++-- data/nibs/Gajim.nib/info.nib | 9 +++-- data/nibs/Gajim.nib/keyedobjects.nib | Bin 6413 -> 7184 bytes launch.sh | 4 +++ src/gajim.py | 2 +- src/osx/syncmenu/Makefile.am | 4 +-- src/osx/syncmenu/sync-menu.c | 10 ++++-- src/roster_window.py | 49 +++++++++++++-------------- 8 files changed, 46 insertions(+), 38 deletions(-) diff --git a/TODO.osx b/TODO.osx index 7216d3aea..b5c332299 100644 --- a/TODO.osx +++ b/TODO.osx @@ -23,12 +23,10 @@ The bits that dont work - fix user session management -integrate the Gajim and gajim-remote scripts with autoconf and add GTK framework detection --Pass icons to OS/X menu --set the LSEnvironment in Info.plist for gtk paths instead of hard coding in - gajim.py --Maybe setup the pasteboard services for an OS/X alternative to the +-Maybe setup the pasteboard services for an OS/X alternative to the gajim_remote -CFBundleDocumentTypes.NSDocument +-zeroconf has a parsing problem with the MDNS result. Native GTK bugs diff --git a/data/nibs/Gajim.nib/info.nib b/data/nibs/Gajim.nib/info.nib index 90bdefffb..9cb6b534d 100644 --- a/data/nibs/Gajim.nib/info.nib +++ b/data/nibs/Gajim.nib/info.nib @@ -3,19 +3,22 @@ IBDocumentLocation - 69 10 356 240 0 0 1280 832 + 82 255 356 240 0 0 1280 832 IBEditorPositions 29 - 245 312 185 44 0 0 1280 832 + 476 296 342 44 0 0 1280 832 IBFramework Version 446.1 + IBOldestOS + 4 IBOpenObjects + 289 29 IBSystem Version - 8R218 + 8S165 diff --git a/data/nibs/Gajim.nib/keyedobjects.nib b/data/nibs/Gajim.nib/keyedobjects.nib index bc313d484ed50e29c78da3564417e80d2ac9b29b..f13f467bfe6fadf16da4c85320890c42da20822f 100644 GIT binary patch literal 7184 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 literal 6413 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 Q5AWFQ?YH(e{#{S`7pMXXC;$Ke diff --git a/launch.sh b/launch.sh index 1b23c5c4d..7a3f8b5f6 100755 --- a/launch.sh +++ b/launch.sh @@ -4,6 +4,10 @@ OS=`uname -s` if [ "x${OS}" == "xDarwin" ]; then export RESOURCEPATH="${BASE}/dist/Gajim.app/Contents/Resources" + GTK_DIR="/Library/Frameworks/GTK+.framework/Versions/Current" + export PATH="${GTK_DIR}/bin:$PATH" + export PYTHONPATH="${GTK_DIR}/lib/python2.5/site-packages:${GTK_DIR}/lib/python2.5/site-packages/gtk-2.0:${PYTHONPATH}" + unset GTK_DIR fi cd ${BASE}/src diff --git a/src/gajim.py b/src/gajim.py index 6954e764f..99c9e75e4 100755 --- a/src/gajim.py +++ b/src/gajim.py @@ -297,7 +297,7 @@ def pid_alive(): return False elif sys.platform == 'darwin': from osx import checkPID - return checkPID(pid, 'gajim') + return checkPID(pid, 'Gajim.bin') try: if not os.path.exists('/proc'): return True # no /proc, assume Gajim is running diff --git a/src/osx/syncmenu/Makefile.am b/src/osx/syncmenu/Makefile.am index 797476559..d8ff94861 100644 --- a/src/osx/syncmenu/Makefile.am +++ b/src/osx/syncmenu/Makefile.am @@ -10,8 +10,8 @@ if BUILD_COCOA syncmenulib_LTLIBRARIES = syncmenu.la syncmenulibdir = $(libdir)/gajim syncmenu_la_SOURCES = sync-menu.c pysyncmenu.c -syncmenu_la_LDFLAGS = -module -avoid-version $(GTKLDFLAGS) -syncmenu_la_CFLAGS = $(GTKCFLAGS) -Wall -g $(INCLUDES) +syncmenu_la_LDFLAGS = -module -avoid-version -Xcompiler -isysroot -Xcompiler /Developer/SDKs/MacOSX10.4u.sdk -Xcompiler -arch -Xcompiler ppc -Xcompiler -arch -Xcompiler i386 $(GTKLDFLAGS) +syncmenu_la_CFLAGS = -Xcompiler -isysroot -Xcompiler /Developer/SDKs/MacOSX10.4u.sdk -Xcompiler -arch -Xcompiler ppc -Xcompiler -arch -Xcompiler i386 $(GTKCFLAGS) -Wall -g $(INCLUDES) endif DISTCLEANFILES = diff --git a/src/osx/syncmenu/sync-menu.c b/src/osx/syncmenu/sync-menu.c index dde97d7f1..f29685c29 100644 --- a/src/osx/syncmenu/sync-menu.c +++ b/src/osx/syncmenu/sync-menu.c @@ -477,11 +477,16 @@ carbon_menu_item_connect (GtkWidget *menu_item, return carbon_item; } - /* * carbon event handler */ +gboolean menuitem_activate_wrapper(gpointer data) +{ + gtk_menu_item_activate((GtkMenuItem*)data); + return FALSE; +} + static OSStatus menu_event_handler_func (EventHandlerCallRef event_handler_call_ref, EventRef event_ref, @@ -526,7 +531,8 @@ menu_event_handler_func (EventHandlerCallRef event_handler_call_ref, sizeof (widget), 0, &widget); if (err == noErr && widget) { - gtk_menu_item_activate (GTK_MENU_ITEM (widget)); + g_idle_add(menuitem_activate_wrapper, + (gpointer)GTK_MENU_ITEM (widget)); return noErr; } } diff --git a/src/roster_window.py b/src/roster_window.py index eabd8f1fb..7eadcf401 100644 --- a/src/roster_window.py +++ b/src/roster_window.py @@ -4191,9 +4191,6 @@ class RosterWindow: gtk.main_quit() def on_quit_menuitem_activate(self, widget): - gobject.idle_add(self.on_quit_menuitem_activate_real, widget) - - def on_quit_menuitem_activate_real(self, widget): accounts = gajim.connections.keys() get_msg = False for acct in accounts: @@ -5187,47 +5184,47 @@ class RosterWindow: def setup_for_osx(self): # Massage the GTK menu so it will match up to the OS/X nib style menu # when passed to sync-menu and merged - main_menu = self.xml.get_widget('menubar') - app_item = gtk.MenuItem('Gajim') + main_menu = self.xml.get_widget("menubar") + app_item = gtk.MenuItem("Gajim") main_menu.insert(app_item, 0) - win_item = gtk.MenuItem('Window') + win_item = gtk.MenuItem("Window") main_menu.insert(win_item, 4) - actions_menu = self.xml.get_widget('actions_menu_menu') - quit_item = self.xml.get_widget('quit_menuitem') + actions_menu = self.xml.get_widget("actions_menu_menu") + quit_item = self.xml.get_widget("quit_menuitem") actions_menu.remove(quit_item) - actions_menu.remove(self.xml.get_widget('separator1')) - edit_menu = self.xml.get_widget('edit_menu_menu') - edit_menu.remove(self.xml.get_widget('preferences_menuitem')) - edit_menu.remove(self.xml.get_widget('separator2')) - help_menu = self.xml.get_widget('help_menu_menu') - about_item = self.xml.get_widget('about_menuitem') + actions_menu.remove(self.xml.get_widget("separator1")) + edit_menu = self.xml.get_widget("edit_menu_menu") + #edit_menu.remove(self.xml.get_widget("preferences_menuitem")) + edit_menu.remove(self.xml.get_widget("separator2")) + help_menu = self.xml.get_widget("help_menu_menu") + about_item = self.xml.get_widget("about_menuitem") help_menu.remove(about_item) # Build up App menu app_menu = gtk.Menu() app_item.set_submenu(app_menu) app_menu.append(about_item) - app_menu.append(gtk.MenuItem('__SKIP__')) - prefs_item = gtk.MenuItem('Preferences...') + app_menu.append(gtk.MenuItem("__SKIP__")) + prefs_item = gtk.MenuItem("Preferences...") prefs_item.connect("activate", self.on_preferences_menuitem_activate) accels = gtk.AccelGroup() - self.xml.get_widget('roster_window').add_accel_group(accels) - prefs_item.add_accelerator('activate', accels, ord(','), + self.xml.get_widget("roster_window").add_accel_group(accels) + prefs_item.add_accelerator("activate", accels, ord(','), gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE) app_menu.append(prefs_item) - app_menu.append(gtk.MenuItem('__SKIP__')) - app_menu.append(gtk.MenuItem('__SKIP__')) - app_menu.append(gtk.MenuItem('__SKIP__')) - app_menu.append(gtk.MenuItem('__SKIP__')) - app_menu.append(gtk.MenuItem('__SKIP__')) - app_menu.append(gtk.MenuItem('__SKIP__')) - app_menu.append(gtk.MenuItem('__SKIP__')) + app_menu.append(gtk.MenuItem("__SKIP__")) + app_menu.append(gtk.MenuItem("__SKIP__")) + app_menu.append(gtk.MenuItem("__SKIP__")) + app_menu.append(gtk.MenuItem("__SKIP__")) + app_menu.append(gtk.MenuItem("__SKIP__")) + app_menu.append(gtk.MenuItem("__SKIP__")) + app_menu.append(gtk.MenuItem("__SKIP__")) app_menu.append(quit_item) app_menu.show_all() # Do the merge baby! syncmenu.takeover_menu(main_menu) self.make_menu(force = True) # Hide the GTK menubar itself and let the OS/X menubar do its thing - self.xml.get_widget('menubar').hide() + #self.xml.get_widget("menubar").hide() return def __init__(self):