Index: swt-source/make_linux.mak =================================================================== --- swt-source.orig/make_linux.mak 2007-06-20 12:01:22.000000000 +0200 +++ swt-source/make_linux.mak 2008-10-08 01:36:56.000000000 +0200 @@ -45,8 +45,8 @@ CAIROLIBS = `pkg-config --libs-only-L cairo` -lcairo # Do not use pkg-config to get libs because it includes unnecessary dependencies (i.e. pangoxft-1.0) -GTKCFLAGS = `pkg-config --cflags gtk+-2.0` -GTKLIBS = `pkg-config --libs-only-L gtk+-2.0 gthread-2.0` -lgtk-x11-2.0 -lgthread-2.0 -L/usr/X11R6/lib $(XLIB64) -lXtst +GTKCFLAGS = `pkg-config --cflags gtk+-2.0 hildon-1 hildon-fm-2` +GTKLIBS = -lhildon-1 -lhildonfm `pkg-config --libs-only-L gtk+-2.0 gthread-2.0` -lgtk-x11-2.0 -lgthread-2.0 -L/usr/X11R6/lib $(XLIB64) -lXtst CDE_LIBS = -L$(CDE_HOME)/lib -R$(CDE_HOME)/lib -lXt -lX11 -lDtSvc @@ -74,8 +74,6 @@ -Wno-non-virtual-dtor \ -fPIC \ -I. \ - -I$(JAVA_HOME)/include \ - -I$(JAVA_HOME)/include/linux \ ${SWT_PTR_CFLAGS} MOZILLALIBS = -shared -Wl,--version-script=mozilla_exports -Bsymbolic MOZILLAEXCLUDES = -DNO_XPCOMGlueShutdown -DNO_XPCOMGlueStartup @@ -96,8 +94,6 @@ -DSWT_VERSION=$(SWT_VERSION) \ $(NATIVE_STATS) \ -DLINUX -DGTK \ - -I$(JAVA_HOME)/include \ - -I$(JAVA_HOME)/include/linux \ -fPIC \ ${SWT_PTR_CFLAGS} LIBS = -shared -fPIC Index: swt-source/os.c =================================================================== --- swt-source.orig/os.c 2008-06-05 13:31:52.000000000 +0200 +++ swt-source/os.c 2008-10-08 01:36:56.000000000 +0200 @@ -17,6 +17,9 @@ #include "os_structs.h" #include "os_stats.h" +#include +#include + #define OS_NATIVE(func) Java_org_eclipse_swt_internal_gtk_OS_##func #ifndef NO_Call @@ -7133,9 +7136,18 @@ JNIEXPORT void JNICALL OS_NATIVE(_1gtk_1container_1add) (JNIEnv *env, jclass that, jint arg0, jint arg1) { + GtkContainer *container = (GtkContainer *) arg0; + GtkWidget *widget = (GtkWidget *) arg1; OS_NATIVE_ENTER(env, that, _1gtk_1container_1add_FUNC); - gtk_container_add((GtkContainer *)arg0, (GtkWidget *)arg1); - OS_NATIVE_EXIT(env, that, _1gtk_1container_1add_FUNC); + if (GTK_CHECK_TYPE (widget, GTK_TYPE_MENU) + && !strcmp(gtk_menu_get_title(GTK_MENU(widget)), "__main_menu__")) + { + hildon_window_set_menu(HILDON_WINDOW(container), GTK_MENU(widget)); + } + else + gtk_container_add((GtkContainer *)arg0, (GtkWidget *)arg1); + + OS_NATIVE_EXIT(env, that, _1gtk_1container_1add_FUNC); } #endif @@ -9375,9 +9387,12 @@ JNIEXPORT jint JNICALL OS_NATIVE(_1gtk_1menu_1bar_1new) (JNIEnv *env, jclass that) { + GtkWidget *menu; jint rc = 0; OS_NATIVE_ENTER(env, that, _1gtk_1menu_1bar_1new_FUNC); - rc = (jint)gtk_menu_bar_new(); + menu = gtk_menu_new(); + gtk_menu_set_title(menu, "__main_menu__"); + rc = (jint) menu; OS_NATIVE_EXIT(env, that, _1gtk_1menu_1bar_1new_FUNC); return rc; } @@ -15849,8 +15864,23 @@ (JNIEnv *env, jclass that, jint arg0) { jint rc = 0; + HildonProgram *p; + GtkWidget *w; OS_NATIVE_ENTER(env, that, _1gtk_1window_1new_FUNC); - rc = (jint)gtk_window_new((GtkWindowType)arg0); +/* + if (GTK_WINDOW_TOPLEVEL == (GtkWindowType) arg0) + { +*/ + p = hildon_program_get_instance(); + w = hildon_window_new(); + hildon_program_add_window(p, HILDON_WINDOW(w)); +/* gtk_window_fullscreen(GTK_WINDOW(w));*/ +/* + } + else + w = gtk_window_new(GTK_WINDOW_POPUP); +*/ + rc = (jint) w; OS_NATIVE_EXIT(env, that, _1gtk_1window_1new_FUNC); return rc; } Index: swt-source/org/eclipse/swt/widgets/Menu.java =================================================================== --- swt-source.orig/org/eclipse/swt/widgets/Menu.java 2008-06-05 13:31:08.000000000 +0200 +++ swt-source/org/eclipse/swt/widgets/Menu.java 2008-10-08 01:36:56.000000000 +0200 @@ -287,9 +287,17 @@ if ((style & SWT.BAR) != 0) { handle = OS.gtk_menu_bar_new (); if (handle == 0) error (SWT.ERROR_NO_HANDLES); + if (parent instanceof Shell) + { + int /*long*/ shellHandle = ((Shell) parent).shellHandle; + OS.gtk_container_add (shellHandle, handle); + } + else + { int /*long*/ vboxHandle = parent.vboxHandle; OS.gtk_container_add (vboxHandle, handle); OS.gtk_box_set_child_packing (vboxHandle, handle, false, true, 0, OS.GTK_PACK_START); + } } else { handle = OS.gtk_menu_new (); if (handle == 0) error (SWT.ERROR_NO_HANDLES); Index: swt-source/org/eclipse/swt/internal/gtk/OS.java =================================================================== --- swt-source.orig/org/eclipse/swt/internal/gtk/OS.java 2008-06-05 13:32:08.000000000 +0200 +++ swt-source/org/eclipse/swt/internal/gtk/OS.java 2008-10-08 01:36:56.000000000 +0200 @@ -473,6 +473,11 @@ public static final byte[] window_state_event = ascii("window-state-event"); /** Properties */ + /* Maemo hildon specific - border added due to toolbar */ + public static final byte[] toolbar_borders = ascii("toolbar-borders"); + /* Maemo hildon specific - border added due to skin graphics area */ + public static final byte[] borders = ascii("borders"); + public static final byte[] active = ascii("active"); public static final byte[] background_gdk = ascii("background-gdk"); public static final byte[] button_relief = ascii("button-relief"); Index: swt-source/org/eclipse/swt/widgets/Shell.java =================================================================== --- swt-source.orig/org/eclipse/swt/widgets/Shell.java 2008-06-05 13:31:10.000000000 +0200 +++ swt-source/org/eclipse/swt/widgets/Shell.java 2008-10-08 01:36:56.000000000 +0200 @@ -1067,6 +1067,14 @@ int /*long*/ gtk_size_allocate (int /*long*/ widget, int /*long*/ allocation) { int width = OS.GTK_WIDGET_WIDTH (shellHandle); int height = OS.GTK_WIDGET_HEIGHT (shellHandle); + + if (!fullScreen) + { + GtkBorder b = getMaemoBorder(false); + width -= (b.left + b.right); + height -= (b.top + b.bottom); + } + if (!resized || oldWidth != width || oldHeight != height) { oldWidth = width; oldHeight = height; @@ -1472,14 +1480,53 @@ if ((state & FOREIGN_HANDLE) != 0) return; Monitor monitor = getMonitor (); Rectangle rect = monitor.getClientArea (); +/* int width = rect.width * 5 / 8; int height = rect.height * 5 / 8; +*/ + + int width = rect.width; + int height = rect.height; + + // Instead of some arbitrary defaults we can use the complete "application + // area" on the maemo platform. + if (!fullScreen) + { + GtkBorder b = getMaemoBorder(false); + width -= (b.left + b.right); + height -= (b.top + b.bottom); + } + if ((style & SWT.RESIZE) != 0) { OS.gtk_window_resize (shellHandle, width, height); } resizeBounds (width, height, false); } +/** + * Retrieves the "borders" or "toolbar-borders" property + * from the Shell. + * + * That is neccessary to calculate correct Shell sizes on + * the Maemo platform. + * + */ +private GtkBorder getMaemoBorder(boolean wantToolbarBorder) +{ + GtkBorder b = new GtkBorder(); + + int /*long*/ [] result = new int /*long*/[1]; + OS.gtk_widget_style_get(shellHandle, + (wantToolbarBorder ? OS.toolbar_borders + : OS.borders), + result, 0); + + if (result[0] != 0) + OS.memmove(b, result[0], GtkBorder.sizeof); + + return b; +} + public void setMaximized (boolean maximized) { checkWidget(); super.setMaximized (maximized); Index: swt-source/os_custom.c =================================================================== --- swt-source.orig/os_custom.c 2008-06-05 13:31:50.000000000 +0200 +++ swt-source/os_custom.c 2008-10-08 01:36:56.000000000 +0200 @@ -13,6 +13,8 @@ * IBM Corporation - initial API and implementation *******************************************************************************/ +#include + #include "swt.h" #include "os_structs.h" #include "os_stats.h" @@ -41,11 +43,22 @@ { jbyte *lparg0=NULL; SWT_PTR rc = 0; + GtkWidget *widget = NULL; OS_NATIVE_ENTER(env, that, _1gtk_1file_1chooser_1dialog_1new_FUNC); if (arg0) if ((lparg0 = (*env)->GetByteArrayElements(env, arg0, NULL)) == NULL) goto fail; /* rc = (SWT_PTR)gtk_file_chooser_dialog_new(lparg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); */ + /* Remaining arguments are thrown away as they cannot be used for the + * HildonFileChooserDialog anyways. + */ + widget = (SWT_PTR) hildon_file_chooser_dialog_new(arg1, (GtkFileChooserAction) arg2); + gtk_window_set_title(GTK_WINDOW(widget), (const gchar *) lparg0); + + rc = (SWT_PTR) widget; +#if 0 +// The code is not supposed to run on AMD64. + { static int initialized = 0; static void *handle = NULL; @@ -70,6 +83,8 @@ rc = (SWT_PTR)(*fptr)(lparg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); } } +#endif + fail: if (arg0 && lparg0) (*env)->ReleaseByteArrayElements(env, arg0, lparg0, 0); OS_NATIVE_EXIT(env, that, _1gtk_1file_1chooser_1dialog_1new_FUNC);