From b6c6f0ef31df868cf2c30b2174b3bf5ff191011d Mon Sep 17 00:00:00 2001 From: perry.werneck@gmail.com Date: Mon, 13 Aug 2012 22:12:49 +0000 Subject: [PATCH] Iniciando implementação do suporte a MACOS pelo gtk3 --- configure.ac | 4 ++++ pw3270.xcodeproj/project.pbxproj | 2 ++ src/include/lib3270/config.h.in | 2 ++ src/pw3270/Makefile.in | 4 ++-- src/pw3270/main.c | 39 +++++++++++++++++++++++++++++++++------ src/pw3270/uiparser/menubar.c | 11 +++++++++-- src/pw3270/uiparser/menuitem.c | 5 +++++ src/pw3270/uiparser/parser.c | 13 +++++++++++++ src/pw3270/uiparser/private.h | 1 + updateChangeLog.sh | 2 +- 10 files changed, 72 insertions(+), 11 deletions(-) diff --git a/configure.ac b/configure.ac index 3266687..8efb37e 100644 --- a/configure.ac +++ b/configure.ac @@ -314,6 +314,10 @@ AC_SUBST(LIBSSL_LIBS) AC_SUBST(LIBSSL_CFLAGS) #--[ Libraries ]---------------------------------------------------------------------------------------------------------------------------------------------- +PKG_CHECK_MODULES( [GTKMAC], [gtk-mac-integration], AC_DEFINE(HAVE_GTKMAC), AC_MSG_NOTICE([macosx integration not present.]) ) +AC_SUBST(GTKMAC_LIBS) +AC_SUBST(GTKMAC_CFLAGS) + AC_SEARCH_LIBS( [sin], [m], AC_DEFINE(HAVE_LIBM), AC_MSG_NOTICE([libm not present.])) AC_SUBST(SOCKET_LIBS) diff --git a/pw3270.xcodeproj/project.pbxproj b/pw3270.xcodeproj/project.pbxproj index a59bbf6..e498b36 100644 --- a/pw3270.xcodeproj/project.pbxproj +++ b/pw3270.xcodeproj/project.pbxproj @@ -8,6 +8,7 @@ /* Begin PBXFileReference section */ C21BB73815D940960093E2FA /* Makefile.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.in; sourceTree = ""; }; + C23EFD5315D99E2D00673C59 /* updateChangeLog.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = updateChangeLog.sh; sourceTree = ""; }; C272066315D7F88300CCCD22 /* configure.ac */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = configure.ac; sourceTree = ""; }; C272066715D7FBF700CCCD22 /* action_table.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = action_table.h; sourceTree = ""; }; C272066815D7FBF700CCCD22 /* actions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = actions.h; sourceTree = ""; }; @@ -263,6 +264,7 @@ C232305B15D7F01F00E76E83 = { isa = PBXGroup; children = ( + C23EFD5315D99E2D00673C59 /* updateChangeLog.sh */, C21BB73815D940960093E2FA /* Makefile.in */, C2C4DAD815D8282600E8C6A0 /* autogen.sh */, C272066315D7F88300CCCD22 /* configure.ac */, diff --git a/src/include/lib3270/config.h.in b/src/include/lib3270/config.h.in index cbbced9..2ac3c80 100644 --- a/src/include/lib3270/config.h.in +++ b/src/include/lib3270/config.h.in @@ -44,6 +44,8 @@ #undef HAVE_GNOME + #undef HAVE_GTKMAC + /* Optional parts. */ #undef X3270_DBCS #undef X3270_SCRIPT diff --git a/src/pw3270/Makefile.in b/src/pw3270/Makefile.in index e666f5d..2a179ff 100644 --- a/src/pw3270/Makefile.in +++ b/src/pw3270/Makefile.in @@ -68,8 +68,8 @@ DEPENDS=*.h common/*.h uiparser/*.h v3270/*.h $(GLOBAL_DEPS) VALGRIND=@VALGRIND@ -CFLAGS=@CFLAGS@ @DLL_CFLAGS@ @GTK_CFLAGS@ -DDATAROOTDIR=\"$(datarootdir)\" -I../../src/include -LIBS=@LIBS@ @GTK_LIBS@ +CFLAGS=@CFLAGS@ @DLL_CFLAGS@ @GTK_CFLAGS@ @GTKMAC_CFLAGS@ -DDATAROOTDIR=\"$(datarootdir)\" -I../../src/include +LIBS=@LIBS@ @GTK_LIBS@ @GTKMAC_LIBS@ #---[ Rules ]------------------------------------------------------------------ diff --git a/src/pw3270/main.c b/src/pw3270/main.c index 422beee..ff3a354 100644 --- a/src/pw3270/main.c +++ b/src/pw3270/main.c @@ -36,10 +36,18 @@ #include "v3270/accessible.h" #include +#ifdef HAVE_GTKMAC + #include +#endif // HAVE_GTKMAC + /*--[ Statics ]--------------------------------------------------------------------------------------*/ static GtkWidget *toplevel = NULL; +#ifdef HAVE_GTKMAC + static GtkOSXApplication * osxapp = NULL; +#endif // HAVE_GTKMAC + /*--[ Implement ]------------------------------------------------------------------------------------*/ static int initialize(void) @@ -116,6 +124,12 @@ int main(int argc, char *argv[]) static const gchar * host = NULL; int rc = 0; +#if ! GLIB_CHECK_VERSION(2,32,0) + g_thread_init(NULL); +#endif // !GLIB(2,32) + + gtk_init(&argc, &argv); + // Setup locale #ifdef LC_ALL setlocale( LC_ALL, "" ); @@ -133,6 +147,21 @@ int main(int argc, char *argv[]) g_free(appdir); } +#elif defined(HAVE_GTKMAC) + { + osxapp = GTK_OSX_APPLICATION(g_object_new(GTK_TYPE_OSX_APPLICATION,NULL)); + + + gchar * appdir = g_build_filename(DATAROOTDIR,PACKAGE_NAME,NULL); + gchar * locdir = g_build_filename(DATAROOTDIR,"locale",NULL); + + g_chdir(appdir); + bindtextdomain( PACKAGE_NAME, locdir); + + g_free(locdir); + g_free(appdir); + + } #elif defined( DATAROOTDIR ) { gchar * appdir = g_build_filename(DATAROOTDIR,PACKAGE_NAME,NULL); @@ -168,12 +197,6 @@ int main(int argc, char *argv[]) g_option_context_add_main_entries(options, app_options, NULL); -#if ! GLIB_CHECK_VERSION(2,32,0) - g_thread_init(NULL); -#endif // !GLIB(2,32) - - gtk_init(&argc, &argv); - if(!g_option_context_parse( options, &argc, &argv, &error )) { int f; @@ -226,6 +249,10 @@ int main(int argc, char *argv[]) if(pw3270_get_toggle(toplevel,LIB3270_TOGGLE_FULL_SCREEN)) gtk_window_fullscreen(GTK_WINDOW(toplevel)); +#ifdef HAVE_GTKMAC + gtk_osxapplication_ready(osxapp); +#endif // HAVE_GTKMAC + gtk_main(); } diff --git a/src/pw3270/uiparser/menubar.c b/src/pw3270/uiparser/menubar.c index e1b716d..ccc754a 100644 --- a/src/pw3270/uiparser/menubar.c +++ b/src/pw3270/uiparser/menubar.c @@ -35,7 +35,9 @@ GObject * ui_create_menubar(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error) { - if(info->element) + GtkWidget *menu; + + if(info->element) { *error = g_error_new(ERROR_DOMAIN,EINVAL, _( "<%s> should be on toplevel"), "menubar"); return NULL; @@ -47,7 +49,12 @@ return NULL; } - return ui_insert_element(info, action, UI_ELEMENT_MENUBAR, names, values, G_OBJECT(gtk_menu_bar_new()),error); + menu = gtk_menu_bar_new(); + + if(ui_get_bool_attribute("topmenu",names,values,info->topmenu == NULL)) + info->topmenu = menu; + + return ui_insert_element(info, action, UI_ELEMENT_MENUBAR, names, values, G_OBJECT(menu),error); } void ui_end_menubar(GMarkupParseContext *context,GObject *widget,struct parser *info,GError **error) diff --git a/src/pw3270/uiparser/menuitem.c b/src/pw3270/uiparser/menuitem.c index 7d9d8f5..0b62675 100644 --- a/src/pw3270/uiparser/menuitem.c +++ b/src/pw3270/uiparser/menuitem.c @@ -31,6 +31,11 @@ #include "private.h" + #ifdef HAVE_GTKMAC + #include + #endif // HAVE_GTKMAC + + /*--[ Implement ]------------------------------------------------------------------------------------*/ GObject * ui_create_menuitem(GMarkupParseContext *context,GtkAction *action,struct parser *info,const gchar **names, const gchar **values, GError **error) diff --git a/src/pw3270/uiparser/parser.c b/src/pw3270/uiparser/parser.c index 469217e..645f797 100644 --- a/src/pw3270/uiparser/parser.c +++ b/src/pw3270/uiparser/parser.c @@ -31,6 +31,11 @@ #include "private.h" + #ifdef HAVE_GTKMAC + #include + #endif // HAVE_GTKMAC + + /*--[ Implement ]------------------------------------------------------------------------------------*/ void parser_init(struct parser *p) @@ -216,6 +221,14 @@ void parser_build(struct parser *p, GtkWidget *widget) gtk_window_add_accel_group(GTK_WINDOW(p->toplevel),a_info.accel_group); gtk_window_set_default(GTK_WINDOW(p->toplevel),widget); + +#ifdef HAVE_GTKMAC + if(p->topmenu) + { + gtk_widget_set_visible(p->topmenu,FALSE); + gtk_mac_menu_set_menu_bar(GTK_MENU_SHELL(p->topmenu)); + } +#endif // HAVE_GTKMAC } diff --git a/src/pw3270/uiparser/private.h b/src/pw3270/uiparser/private.h index 038309e..c42a191 100644 --- a/src/pw3270/uiparser/private.h +++ b/src/pw3270/uiparser/private.h @@ -57,6 +57,7 @@ GtkWidget * toplevel; GObject * element; GtkAction * action; + GtkWidget * topmenu; GtkAction * script_action; GtkWidget * center_widget; GtkWidget ** popup; /**< Popup widgets */ diff --git a/updateChangeLog.sh b/updateChangeLog.sh index 68dcb9f..12a23af 100755 --- a/updateChangeLog.sh +++ b/updateChangeLog.sh @@ -30,7 +30,7 @@ touch ChangeLog REV_TO=${1:-"HEAD"} -REV_LAST=`cat ChangeLog | head -3 - | tr -d '\r\n' | sed -e 's/.*svn\([0-9]*\).*/\1/'` +REV_LAST=`head -3 ChangeLog | tr -d '\r\n' | sed -e 's/.*svn\([0-9]*\).*/\1/'` svn update -- libgit2 0.21.2