From 50c75431e2831757d47e19000ed640d2560494b9 Mon Sep 17 00:00:00 2001 From: David Heidelberg Date: Thu, 21 May 2020 14:17:51 +0200 Subject: [PATCH 1/7] WIP: Refactor:GTK: switch to GTK3 Compiles and open GTK 3 window. Closes: https://github.com/navit-gps/navit/issues/804 --- CMakeLists.txt | 26 +++++++------- config.h.in | 2 +- .../graphics/gtk_drawing_area/CMakeLists.txt | 2 +- .../graphics_gtk_drawing_area.c | 35 +++++++++++++------ navit/gui/gtk/gui_gtk_action.c | 2 +- navit/gui/gtk/gui_gtk_statusbar.c | 2 +- navit/gui/gtk/gui_gtk_window.c | 9 +++-- 7 files changed, 46 insertions(+), 32 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9b4bf0f378..d836284f86 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -110,7 +110,7 @@ add_module(graphics/qt5 "Qt5 libraries not found" FALSE) add_module(graphics/svg_debug "native Glib not found" FALSE) add_module(gui/qml "Qt Declarative not found" FALSE) add_module(gui/qt5_qml "Qt5 Declarative not found" FALSE) -add_module(gui/gtk "GTK libs not found" FALSE) +add_module(gui/gtk "GTK3 libs not found" FALSE) add_module(vehicle/geoclue "geoclue lib not found" FALSE) add_module(vehicle/gpsd "gpsd lib not found" FALSE) add_module(vehicle/gypsy "gypsy lib not found" FALSE) @@ -197,6 +197,7 @@ if(PKG_CONFIG_FOUND) set_with_reason(vehicle/gpsd_dbus "dbus-glib-1 found" TRUE ${DBUSGLIB_LIBRARIES}) endif() + pkg_check_modules(GTK3 gtk+-3.0) pkg_check_modules(LIBLOCATION liblocation) pkg_check_modules(LIBOSSO libosso) # Accept even old versions of libgps, because N810 uses an old version (see #1179). @@ -234,7 +235,6 @@ find_package(SDL_image) find_library(GLES2 GLESv2) find_package(OpenGL) find_package(GLUT) -find_package(GTK2 2.6 COMPONENTS gtk) find_package(Gettext) find_package(PNG) find_package(PythonLibs) @@ -417,16 +417,17 @@ if (Qt5Positioning_FOUND) ${Qt5Positioning_LIBRARIES} ${Qt5Sensors_LIBRARIES}) endif () -if(GTK2_FOUND) +if(GTK3_FOUND) # Include gtk.h with "SYSTEM" to avoid GCC compiler warning for gtkitemfactory.h. - include_directories(SYSTEM ${GTK2_GTK_INCLUDE_DIR}) - include_directories(${GTK2_INCLUDE_DIRS}) - set(HAVE_GTK2 1) - set_with_reason(gui/gtk "GTK libs found" TRUE ${GTK2_LIBRARIES}) + include_directories(SYSTEM ${GTK3_GTK_INCLUDE_DIR}) + include_directories(${GTK3_INCLUDE_DIRS}) + set(HAVE_GTK3 1) + set_with_reason(gui/gtk "GTK libs found" TRUE ${GTK3_LIBRARIES}) if(FREETYPE_FOUND) - set_with_reason(graphics/gtk_drawing_area "GTK libs found" TRUE ${GTK2_LIBRARIES}) + set_with_reason(graphics/gtk_drawing_area "GTK3 libs found" + TRUE ${GTK3_LIBRARIES}) endif(FREETYPE_FOUND) -endif(GTK2_FOUND) +endif(GTK3_FOUND) CHECK_LIBRARY_EXISTS(freeimage FreeImage_Load "" HAVE_FREEIMAGE) if (USE_OPENGLES OR USE_OPENGLES2) @@ -664,10 +665,11 @@ if(WIN32 OR WINCE) set(TEXTURE_DIR textures) - if(HAVE_GTK2 AND NOT MSVC) - #GTK requires special compile flags + if(HAVE_GTK3 AND NOT MSVC) + # GTK2 requires special compile flags, + # TODO verify if still valid for GTK3 add_definitions("-mms-bitfields") - endif(HAVE_GTK2 AND NOT MSVC) + endif(HAVE_GTK3 AND NOT MSVC) if(MSVC AND support/espeak) add_definitions(-DPLATFORM_WINDOWS) endif(MSVC AND support/espeak) diff --git a/config.h.in b/config.h.in index 0527321bf0..d37d7880df 100644 --- a/config.h.in +++ b/config.h.in @@ -32,7 +32,7 @@ #cmakedefine USE_ROUTING 1 -#cmakedefine HAVE_GTK2 1 +#cmakedefine HAVE_GTK3 1 #cmakedefine HAVE_FONTCONFIG 1 diff --git a/navit/graphics/gtk_drawing_area/CMakeLists.txt b/navit/graphics/gtk_drawing_area/CMakeLists.txt index b5b55f4f66..4af93b17bf 100644 --- a/navit/graphics/gtk_drawing_area/CMakeLists.txt +++ b/navit/graphics/gtk_drawing_area/CMakeLists.txt @@ -1,3 +1,3 @@ -set(graphics_gtk_drawing_area_LIBS ${IMLIB2_LDFLAGS} ${GTK2_LIBRARIES}) +set(graphics_gtk_drawing_area_LIBS ${IMLIB2_LDFLAGS} ${GTK3_LIBRARIES}) module_add_library(graphics_gtk_drawing_area graphics_gtk_drawing_area.c) diff --git a/navit/graphics/gtk_drawing_area/graphics_gtk_drawing_area.c b/navit/graphics/gtk_drawing_area/graphics_gtk_drawing_area.c index e9d34dd826..01414cf76e 100644 --- a/navit/graphics/gtk_drawing_area/graphics_gtk_drawing_area.c +++ b/navit/graphics/gtk_drawing_area/graphics_gtk_drawing_area.c @@ -612,9 +612,10 @@ static void background_gc(struct graphics_priv *gr, struct graphics_gc_priv *gc) static void draw_mode(struct graphics_priv *gr, enum draw_mode_num mode) { if (mode == draw_mode_end) { + GdkWindow * gdk_window = gtk_widget_get_window(gr->widget); // Just invalidate the whole window. We could only the invalidate the area of // graphics_priv, but that is probably not significantly faster. - gdk_window_invalidate_rect(gr->widget->window, NULL, TRUE); + gdk_window_invalidate_rect(gdk_window, NULL, TRUE); } } @@ -622,13 +623,17 @@ static void draw_mode(struct graphics_priv *gr, enum draw_mode_num mode) { static gint configure(GtkWidget * widget, GdkEventConfigure * event, gpointer user_data) { struct graphics_priv *gra=user_data; + GtkAllocation *allocation = g_new0 (GtkAllocation, 1); + if (! gra->visible) return TRUE; #ifndef _WIN32 - dbg(lvl_debug,"window=%lu", GDK_WINDOW_XID(widget->window)); + GdkWindow * gdk_window = gtk_widget_get_window(widget); + dbg(lvl_debug,"window=%lu", GDK_WINDOW_XID(gdk_window)); #endif - gra->width=widget->allocation.width; - gra->height=widget->allocation.height; + gtk_widget_get_allocation(GTK_WIDGET(widget), allocation); + gra->width = allocation->width; + gra->height = allocation->height; cairo_surface_t *surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, gra->width, gra->height); if (gra->cairo) cairo_destroy(gra->cairo); @@ -643,12 +648,13 @@ static gint expose(GtkWidget * widget, GdkEventExpose * event, gpointer user_dat struct graphics_priv *gra=user_data; struct graphics_gc_priv *background_gc=gra->background_gc; struct graphics_priv *overlay; + GdkWindow * gdk_window = gtk_widget_get_window(widget); gra->visible=1; if (! gra->cairo) configure(widget, NULL, user_data); - cairo_t *cairo=gdk_cairo_create(widget->window); + cairo_t *cairo = gdk_cairo_create(gdk_window); if (gra->p.x || gra->p.y) { set_drawing_color(cairo, background_gc->c); cairo_paint(cairo); @@ -853,9 +859,10 @@ static void overlay_disable(struct graphics_priv *gr, int disabled) { if (!gr->overlay_disabled != !disabled) { gr->overlay_disabled=disabled; if (gr->parent) { + GdkWindow * gdk_window = gtk_widget_get_window(gr->parent->widget); GdkRectangle r; overlay_rect(gr->parent, gr, &r); - gdk_window_invalidate_rect(gr->parent->widget->window, &r, TRUE); + gdk_window_invalidate_rect(gdk_window, &r, TRUE); } } } @@ -916,7 +923,7 @@ static void get_data_window(struct graphics_priv *this, unsigned int xid) { else this->win = gtk_plug_new(xid); if (!gtk_widget_get_parent(this->widget)) - gtk_widget_ref(this->widget); + g_object_ref(this->widget); gtk_window_set_default_size(GTK_WINDOW(this->win), this->win_w, this->win_h); dbg(lvl_debug,"h= %i, w= %i",this->win_h, this->win_w); gtk_window_set_title(GTK_WINDOW(this->win), this->window_title); @@ -927,7 +934,7 @@ static void get_data_window(struct graphics_priv *this, unsigned int xid) { else gtk_container_add(GTK_CONTAINER(this->win), this->widget); gtk_widget_show_all(this->win); - GTK_WIDGET_SET_FLAGS (this->widget, GTK_CAN_FOCUS); + gtk_widget_set_can_focus(this->widget, TRUE); gtk_widget_set_sensitive(this->widget, TRUE); gtk_widget_grab_focus(this->widget); g_signal_connect(G_OBJECT(this->widget), "key-press-event", G_CALLBACK(keypress), this); @@ -1015,8 +1022,15 @@ static void *get_data(struct graphics_priv *this, char const *type) { if (!strcmp(type,"gtk_widget")) return this->widget; #ifndef _WIN32 - if (!strcmp(type,"xwindow_id")) - return (void *)GDK_WINDOW_XID(this->win ? this->win->window : this->widget->window); + if (!strcmp(type,"xwindow_id")) { + if (this->win) { + GdkWindow * gdk_window = gtk_widget_get_window(this->win); + return (void *)GDK_WINDOW_XID(gdk_window); + } + + GdkWindow * gdk_window = gtk_widget_get_window(this->widget); + return (void *)GDK_WINDOW_XID(gdk_window); + } #endif if (!strcmp(type,"window")) { char *cp = getenv("NAVIT_XID"); @@ -1157,7 +1171,6 @@ static struct graphics_priv *graphics_gtk_drawing_area_new(struct navit *nav, st void plugin_init(void) { gtk_init(>k_argc, >k_argv); - gtk_set_locale(); #ifdef HAVE_API_WIN32 setlocale(LC_NUMERIC, "C"); /* WIN32 gtk resets LC_NUMERIC */ #endif diff --git a/navit/gui/gtk/gui_gtk_action.c b/navit/gui/gtk/gui_gtk_action.c index 7b700c7d5d..5e81b4bd50 100644 --- a/navit/gui/gtk/gui_gtk_action.c +++ b/navit/gui/gtk/gui_gtk_action.c @@ -593,7 +593,7 @@ static struct menu_priv *gui_gtk_ui_new (struct gui_priv *this, struct menu_meth ret->gui=this; widget=gtk_ui_manager_get_widget(this->ui_manager, path); - GTK_WIDGET_UNSET_FLAGS (widget, GTK_CAN_FOCUS); + gtk_widget_set_can_focus(widget, FALSE); if (widget_ret) *widget_ret=widget; if (! popup) { diff --git a/navit/gui/gtk/gui_gtk_statusbar.c b/navit/gui/gtk/gui_gtk_statusbar.c index e67201b56c..be96cf1dbc 100644 --- a/navit/gui/gtk/gui_gtk_statusbar.c +++ b/navit/gui/gtk/gui_gtk_statusbar.c @@ -182,7 +182,7 @@ gui_gtk_statusbar_new(struct gui_priv *gui) { gtk_box_pack_start(GTK_BOX(this->hbox), this->gps, TRUE, TRUE, 2); gtk_box_pack_start(GTK_BOX(this->hbox), gtk_vseparator_new(), TRUE, TRUE, 2); gtk_box_pack_start(GTK_BOX(this->hbox), this->route, TRUE, TRUE, 2); - GTK_WIDGET_UNSET_FLAGS (this->hbox, GTK_CAN_FOCUS); + gtk_widget_set_can_focus(this->hbox, FALSE); gtk_box_pack_end(GTK_BOX(gui->vbox), this->hbox, FALSE, FALSE, 0); gtk_widget_show_all(this->hbox); diff --git a/navit/gui/gtk/gui_gtk_window.c b/navit/gui/gtk/gui_gtk_window.c index f0d13528a0..3736017d80 100644 --- a/navit/gui/gtk/gui_gtk_window.c +++ b/navit/gui/gtk/gui_gtk_window.c @@ -207,7 +207,7 @@ static int gui_gtk_set_graphics(struct gui_priv *this, struct graphics *gra) { graphics=graphics_get_data(gra, "gtk_widget"); if (! graphics) return 1; - GTK_WIDGET_SET_FLAGS (graphics, GTK_CAN_FOCUS); + gtk_widget_set_can_focus(graphics, TRUE); gtk_widget_set_sensitive(graphics, TRUE); g_signal_connect(G_OBJECT(graphics), "key-press-event", G_CALLBACK(keypress), this); gtk_box_pack_end(GTK_BOX(this->vbox), graphics, TRUE, TRUE, 0); @@ -264,7 +264,7 @@ static int gui_gtk_add_bookmark(struct gui_priv *gui, struct pcoord *c, char *de gtk_box_pack_start(GTK_BOX(hbox), button_cancel, TRUE, TRUE, 10); gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 10); gtk_widget_show_all(gui->dialog_win); - GTK_WIDGET_SET_FLAGS (button_ok, GTK_CAN_DEFAULT); + gtk_widget_set_can_default(button_ok, TRUE); gtk_widget_grab_default(button_ok); g_signal_connect_swapped (G_OBJECT (button_cancel), "clicked", G_CALLBACK (gtk_widget_destroy), G_OBJECT (gui->dialog_win)); @@ -725,14 +725,14 @@ static struct gui_priv *gui_gtk_new(struct navit *nav, struct gui_methods *meth, gui_gtk_ui_init(this); if (this->menubar_enable) { widget=gtk_ui_manager_get_widget(this->ui_manager, "/ui/MenuBar"); - GTK_WIDGET_UNSET_FLAGS (widget, GTK_CAN_FOCUS); + gtk_widget_set_can_focus(widget, FALSE); gtk_box_pack_start (GTK_BOX(this->vbox), widget, FALSE, FALSE, 0); gtk_widget_show (widget); this->menubar=widget; } if (this->toolbar_enable) { widget=gtk_ui_manager_get_widget(this->ui_manager, "/ui/ToolBar"); - GTK_WIDGET_UNSET_FLAGS (widget, GTK_CAN_FOCUS); + gtk_widget_set_can_focus(widget, FALSE); gtk_box_pack_start (GTK_BOX(this->vbox), widget, FALSE, FALSE, 0); gtk_widget_show (widget); } @@ -764,7 +764,6 @@ static char **gtk_argv= {NULL}; void plugin_init(void) { gtk_init(>k_argc, >k_argv); - gtk_set_locale(); #ifdef HAVE_API_WIN32 setlocale(LC_NUMERIC,"C"); #endif From 8f9ec61bc0d35bec837a27ad412754fd93893002 Mon Sep 17 00:00:00 2001 From: Stefan Wildemann Date: Mon, 22 Jun 2020 00:02:02 +0200 Subject: [PATCH 2/7] fix:graphics:gtk_drawing_area: port to gtk3 Now it seems to somehow work. It draws and the usual controls (keyboard, mouse, mousewheeel) seem to work. Memory usage unchecked. Need to valgrind. --- .../graphics_gtk_drawing_area.c | 50 ++++++++++++------- 1 file changed, 31 insertions(+), 19 deletions(-) diff --git a/navit/graphics/gtk_drawing_area/graphics_gtk_drawing_area.c b/navit/graphics/gtk_drawing_area/graphics_gtk_drawing_area.c index 01414cf76e..4219d2f769 100644 --- a/navit/graphics/gtk_drawing_area/graphics_gtk_drawing_area.c +++ b/navit/graphics/gtk_drawing_area/graphics_gtk_drawing_area.c @@ -25,6 +25,7 @@ #include #include #include +#include #include #include /* For WIN32 */ #if !defined(GDK_KEY_Book) || !defined(GDK_Book) || !defined(GDK_Calendar) @@ -612,7 +613,7 @@ static void background_gc(struct graphics_priv *gr, struct graphics_gc_priv *gc) static void draw_mode(struct graphics_priv *gr, enum draw_mode_num mode) { if (mode == draw_mode_end) { - GdkWindow * gdk_window = gtk_widget_get_window(gr->widget); + GdkWindow * gdk_window = gtk_widget_get_window(gr->widget); // Just invalidate the whole window. We could only the invalidate the area of // graphics_priv, but that is probably not significantly faster. gdk_window_invalidate_rect(gdk_window, NULL, TRUE); @@ -644,31 +645,39 @@ static gint configure(GtkWidget * widget, GdkEventConfigure * event, gpointer us return TRUE; } -static gint expose(GtkWidget * widget, GdkEventExpose * event, gpointer user_data) { +static gboolean expose(GtkWidget *widget, cairo_t *cairo, gpointer user_data) { struct graphics_priv *gra=user_data; struct graphics_gc_priv *background_gc=gra->background_gc; struct graphics_priv *overlay; - GdkWindow * gdk_window = gtk_widget_get_window(widget); + cairo_rectangle_int_t clip_rect; + GdkRectangle re; gra->visible=1; if (! gra->cairo) configure(widget, NULL, user_data); - cairo_t *cairo = gdk_cairo_create(gdk_window); + re.x=gtk_widget_get_allocated_width(widget); + re.y=gtk_widget_get_allocated_height(widget); + if (gdk_cairo_get_clip_rectangle (cairo, &clip_rect)) { + re.x=clip_rect.x; + re.y=clip_rect.y; + } + if (gra->p.x || gra->p.y) { set_drawing_color(cairo, background_gc->c); cairo_paint(cairo); } + cairo_set_source_surface(cairo, cairo_get_target(gra->cairo), gra->p.x, gra->p.y); cairo_paint(cairo); overlay = gra->overlays; while (overlay) { - overlay_draw(gra,overlay,&event->area,cairo); + overlay_draw(gra,overlay,&re,cairo); overlay=overlay->next; } - cairo_destroy(cairo); +// cairo_destroy(cairo); return FALSE; } @@ -859,7 +868,7 @@ static void overlay_disable(struct graphics_priv *gr, int disabled) { if (!gr->overlay_disabled != !disabled) { gr->overlay_disabled=disabled; if (gr->parent) { - GdkWindow * gdk_window = gtk_widget_get_window(gr->parent->widget); + GdkWindow * gdk_window = gtk_widget_get_window(gr->parent->widget); GdkRectangle r; overlay_rect(gr->parent, gr, &r); gdk_window_invalidate_rect(gdk_window, &r, TRUE); @@ -927,12 +936,13 @@ static void get_data_window(struct graphics_priv *this, unsigned int xid) { gtk_window_set_default_size(GTK_WINDOW(this->win), this->win_w, this->win_h); dbg(lvl_debug,"h= %i, w= %i",this->win_h, this->win_w); gtk_window_set_title(GTK_WINDOW(this->win), this->window_title); - gtk_window_set_wmclass (GTK_WINDOW (this->win), "navit", this->window_title); gtk_widget_realize(this->win); - if (gtk_widget_get_parent(this->widget)) - gtk_widget_reparent(this->widget, this->win); - else + if (gtk_widget_get_parent(this->widget)) { + gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(this->widget)), this->widget); gtk_container_add(GTK_CONTAINER(this->win), this->widget); + } else { + gtk_container_add(GTK_CONTAINER(this->win), this->widget); + } gtk_widget_show_all(this->win); gtk_widget_set_can_focus(this->widget, TRUE); gtk_widget_set_sensitive(this->widget, TRUE); @@ -1023,13 +1033,13 @@ static void *get_data(struct graphics_priv *this, char const *type) { return this->widget; #ifndef _WIN32 if (!strcmp(type,"xwindow_id")) { - if (this->win) { - GdkWindow * gdk_window = gtk_widget_get_window(this->win); - return (void *)GDK_WINDOW_XID(gdk_window); - } + if (this->win) { + GdkWindow * gdk_window = gtk_widget_get_window(this->win); + return (void *)GDK_WINDOW_XID(gdk_window); + } - GdkWindow * gdk_window = gtk_widget_get_window(this->widget); - return (void *)GDK_WINDOW_XID(gdk_window); + GdkWindow * gdk_window = gtk_widget_get_window(this->widget); + return (void *)GDK_WINDOW_XID(gdk_window); } #endif if (!strcmp(type,"window")) { @@ -1150,8 +1160,10 @@ static struct graphics_priv *graphics_gtk_drawing_area_new(struct navit *nav, st else this->window_title=g_strdup("Navit"); this->cbl=cbl; - gtk_widget_set_events(draw, GDK_BUTTON_PRESS_MASK|GDK_BUTTON_RELEASE_MASK|GDK_POINTER_MOTION_MASK|GDK_KEY_PRESS_MASK); - g_signal_connect(G_OBJECT(draw), "expose_event", G_CALLBACK(expose), this); + gtk_widget_set_events(draw, + GDK_BUTTON_PRESS_MASK|GDK_BUTTON_RELEASE_MASK|GDK_POINTER_MOTION_MASK|GDK_KEY_PRESS_MASK|GDK_SCROLL_MASK); + + g_signal_connect(G_OBJECT(draw), "draw", G_CALLBACK(expose), this); g_signal_connect(G_OBJECT(draw), "configure_event", G_CALLBACK(configure), this); g_signal_connect(G_OBJECT(draw), "button_press_event", G_CALLBACK(button_press), this); g_signal_connect(G_OBJECT(draw), "button_release_event", G_CALLBACK(button_release), this); From 87341a266e785e442a2ccaa2798f50cc47691f69 Mon Sep 17 00:00:00 2001 From: Stefan Wildemann Date: Mon, 22 Jun 2020 22:27:29 +0200 Subject: [PATCH 3/7] fix:ci:linux update gtk on ci --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index e643305e64..c7901adf39 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -32,7 +32,7 @@ jobs: name: Setup requirements command: | bash scripts/setup_common_requirements.sh - apt-get install -y libpng-dev libfreetype6-dev libdbus-glib-1-dev libgtk2.0-dev curl + apt-get install -y libpng-dev libfreetype6-dev libdbus-glib-1-dev libgtk3-dev curl - run: name: Build for Linux command: bash scripts/build_linux.sh From 28f2b98e4422cd23ac17b0936c09cb5ff30927f5 Mon Sep 17 00:00:00 2001 From: Stefan Wildemann Date: Mon, 22 Jun 2020 22:38:10 +0200 Subject: [PATCH 4/7] fix:ci:linux correct gtk3 package name --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index c7901adf39..883f6c1c8b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -32,7 +32,7 @@ jobs: name: Setup requirements command: | bash scripts/setup_common_requirements.sh - apt-get install -y libpng-dev libfreetype6-dev libdbus-glib-1-dev libgtk3-dev curl + apt-get install -y libpng-dev libfreetype6-dev libdbus-glib-1-dev libgtk-3-dev curl - run: name: Build for Linux command: bash scripts/build_linux.sh From c367badb63c915c8b9a393a920e1593af9006e1f Mon Sep 17 00:00:00 2001 From: Stefan Wildemann Date: Mon, 22 Jun 2020 23:54:52 +0200 Subject: [PATCH 5/7] HACK:update:gui:gtk somehow shows up, but frequent segfaults --- navit/gui/gtk/destination.c | 4 ++-- navit/gui/gtk/gui_gtk_poi.c | 5 ++++- navit/gui/gtk/gui_gtk_window.c | 1 + 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/navit/gui/gtk/destination.c b/navit/gui/gtk/destination.c index 34c8402001..5cfbf2294a 100644 --- a/navit/gui/gtk/destination.c +++ b/navit/gui/gtk/destination.c @@ -545,7 +545,7 @@ int destination_address(struct navit *nav) { gtk_widget_grab_focus(search->entry_city); gtk_box_pack_start(GTK_BOX(vbox), table, TRUE, TRUE, 0); - keyboard=gtk_socket_new(); +// keyboard=gtk_socket_new(); gtk_box_pack_end(GTK_BOX(vbox), keyboard, FALSE, FALSE, 0); gtk_container_add(GTK_CONTAINER(window2), vbox); #if 0 @@ -554,7 +554,7 @@ int destination_address(struct navit *nav) { gtk_widget_show_all(window2); #ifndef _WIN32 - gtk_socket_steal(GTK_SOCKET(keyboard), spawn_xkbd("xkbd","-geometry 200x100")); +// gtk_socket_steal(GTK_SOCKET(keyboard), spawn_xkbd("xkbd","-geometry 200x100")); #endif country_attr=country_default(); diff --git a/navit/gui/gtk/gui_gtk_poi.c b/navit/gui/gtk/gui_gtk_poi.c index 77502f03fc..472935ca00 100644 --- a/navit/gui/gtk/gui_gtk_poi.c +++ b/navit/gui/gtk/gui_gtk_poi.c @@ -19,6 +19,7 @@ #include #include +#include #include "gui_gtk_poi.h" #include "popup.h" #include "debug.h" @@ -384,7 +385,9 @@ void gtk_gui_poi(struct navit *nav) { search->label_distance = gtk_label_new(_("Select a search radius from screen center in miles")); } - search->entry_distance=gtk_entry_new_with_max_length(2); + //search->entry_distance=gtk_entry_new_with_max_length(2); + search->entry_distance=gtk_entry_new(); + gtk_entry_set_max_length(GTK_ENTRY(search->entry_distance),2); gtk_entry_set_text(GTK_ENTRY(search->entry_distance),"10"); search->treeview_cat=gtk_tree_view_new(); diff --git a/navit/gui/gtk/gui_gtk_window.c b/navit/gui/gtk/gui_gtk_window.c index 3736017d80..c7343d4596 100644 --- a/navit/gui/gtk/gui_gtk_window.c +++ b/navit/gui/gtk/gui_gtk_window.c @@ -27,6 +27,7 @@ #include #endif #include +#include #include "config.h" #include "item.h" #include "xmlconfig.h" From 0078bfbd13a2c16e7ec5d491764d5376ff1717c0 Mon Sep 17 00:00:00 2001 From: David Heidelberg Date: Sat, 22 May 2021 16:26:07 +0200 Subject: [PATCH 6/7] fix:update:gui:gtk: adapt POI screen Signed-off-by: David Heidelberg --- navit/gui/gtk/gui_gtk_poi.c | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/navit/gui/gtk/gui_gtk_poi.c b/navit/gui/gtk/gui_gtk_poi.c index 472935ca00..e7fbb254cd 100644 --- a/navit/gui/gtk/gui_gtk_poi.c +++ b/navit/gui/gtk/gui_gtk_poi.c @@ -352,7 +352,7 @@ static void button_visit_clicked(GtkWidget *widget, struct gtk_poi_search *searc * @param nav The navit instance */ void gtk_gui_poi(struct navit *nav) { - GtkWidget *window2,*vbox, *keyboard, *table; + GtkWidget *window2, *vbox, *keyboard, *grid; GtkWidget *label_category, *label_poi; GtkWidget *listbox_cat, *listbox_poi; GtkCellRenderer *renderer; @@ -363,10 +363,9 @@ void gtk_gui_poi(struct navit *nav) { navit_populate_search_results_map(search->nav, NULL, NULL); /* Remove any highlighted point on the map */ window2 = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window2),_("POI search")); - gtk_window_set_wmclass (GTK_WINDOW (window2), "navit", "Navit"); gtk_window_set_default_size (GTK_WINDOW (window2),700,550); - vbox = gtk_vbox_new(FALSE, 0); - table = gtk_table_new(4, 4, FALSE); + vbox = gtk_box_new( GTK_ORIENTATION_VERTICAL, 0); + grid = gtk_grid_new(); label_category = gtk_label_new(_("Select a category")); label_poi=gtk_label_new(_("Select a POI")); @@ -393,7 +392,7 @@ void gtk_gui_poi(struct navit *nav) { search->treeview_cat=gtk_tree_view_new(); listbox_cat = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (listbox_cat), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(listbox_cat),search->treeview_cat); + gtk_container_add(GTK_CONTAINER(listbox_cat), search->treeview_cat); search->store_cat = gtk_list_store_new (3, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING); renderer=gtk_cell_renderer_pixbuf_new(); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (search->treeview_cat),-1, _(" "), renderer, "pixbuf", 0, @@ -408,7 +407,7 @@ void gtk_gui_poi(struct navit *nav) { search->treeview_poi=gtk_tree_view_new(); listbox_poi = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (listbox_poi), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(listbox_poi),search->treeview_poi); + gtk_container_add(GTK_CONTAINER(listbox_poi), search->treeview_poi); search->store_poi = gtk_list_store_new (5, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_LONG, G_TYPE_LONG); renderer=gtk_cell_renderer_text_new(); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (search->treeview_poi),-1, _("Direction"), renderer, "text", @@ -429,16 +428,15 @@ void gtk_gui_poi(struct navit *nav) { gtk_widget_set_sensitive(search->button_map,FALSE); gtk_widget_set_sensitive(search->button_destination,FALSE); - gtk_table_attach(GTK_TABLE(table), search->label_distance, 0, 1, 0, 1, 0, GTK_FILL, 0, 0); - gtk_table_attach(GTK_TABLE(table), search->entry_distance, 1, 2, 0, 1, 0, GTK_FILL, 0, 0); - gtk_table_attach(GTK_TABLE(table), label_category, 0, 1, 2, 3, 0, GTK_FILL, 0, 0); - gtk_table_attach(GTK_TABLE(table), listbox_cat, 0, 1, 3, 4, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0); - gtk_table_attach(GTK_TABLE(table), label_poi, 1, 4, 2, 3, 0, GTK_FILL, 0, 0); - gtk_table_attach(GTK_TABLE(table), listbox_poi, 1, 4, 3, 4, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0); - gtk_table_attach(GTK_TABLE(table), search->button_map, 0, 1, 4, 5, GTK_FILL, GTK_FILL, 0, 0); - gtk_table_attach(GTK_TABLE(table), search->button_visit, 1, 2, 4, 5, GTK_FILL, GTK_FILL, 0, 0); - gtk_table_attach(GTK_TABLE(table), search->button_destination, 2, 3, 4, 5, GTK_FILL, GTK_FILL, 0, 0); - gtk_box_pack_start(GTK_BOX(vbox), table, TRUE, TRUE, 0); + gtk_grid_attach(GTK_GRID(grid), search->label_distance, 0, 0, 1, 1); + gtk_grid_attach(GTK_GRID(grid), search->entry_distance, 1, 0, 1, 1); + gtk_grid_attach(GTK_GRID(grid), label_category, 0, 2, 1, 1); + gtk_grid_attach(GTK_GRID(grid), label_poi, 1, 2, 3, 1); + gtk_grid_attach(GTK_GRID(grid), listbox_cat, 0, 3, 1, 1); + gtk_grid_attach(GTK_GRID(grid), listbox_poi, 1, 3, 3, 1); + gtk_grid_attach(GTK_GRID(grid), search->button_map, 0, 4, 1, 1); + gtk_grid_attach(GTK_GRID(grid), search->button_visit, 1, 4, 3, 1); + gtk_grid_attach(GTK_GRID(grid), search->button_destination, 2, 4, 1, 1); g_signal_connect(G_OBJECT(search->entry_distance), "changed", G_CALLBACK(treeview_poi_reload), search); g_signal_connect(G_OBJECT(search->button_visit), "clicked", G_CALLBACK(button_visit_clicked), search); From 5897786f42e1060bd92f7f08bbb7bd02119f4952 Mon Sep 17 00:00:00 2001 From: David Heidelberg Date: Sat, 22 May 2021 18:02:30 +0200 Subject: [PATCH 7/7] WIP:gui:gtk:gui_gtk_window: fix warnings Signed-off-by: David Heidelberg --- navit/gui/gtk/gui_gtk_window.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/navit/gui/gtk/gui_gtk_window.c b/navit/gui/gtk/gui_gtk_window.c index c7343d4596..d953966aeb 100644 --- a/navit/gui/gtk/gui_gtk_window.c +++ b/navit/gui/gtk/gui_gtk_window.c @@ -60,10 +60,10 @@ #define KEY_LEFT HILDON_HARDKEY_LEFT #define KEY_RIGHT HILDON_HARDKEY_RIGHT #else -#ifndef GDK_Book +#ifndef GDK_KEY_Book #define GDK_KEY_Book XF86XK_Book #endif -#ifndef GDK_Calendar +#ifndef GDK_KEY_Calendar #define GDK_KEY_Calendar XF86XK_Calendar #endif #define KEY_ZOOM_IN GDK_KEY_Book @@ -247,10 +247,9 @@ static int gui_gtk_add_bookmark(struct gui_priv *gui, struct pcoord *c, char *de gui->dialog_coord=*c; gui->dialog_win=gtk_window_new(GTK_WINDOW_TOPLEVEL); - vbox=gtk_vbox_new(FALSE, 0); + vbox=gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add (GTK_CONTAINER (gui->dialog_win), vbox); gtk_window_set_title(GTK_WINDOW(gui->dialog_win),_("Add Bookmark")); - gtk_window_set_wmclass (GTK_WINDOW (gui->dialog_win), "navit", "Navit"); gtk_window_set_transient_for(GTK_WINDOW(gui->dialog_win), GTK_WINDOW(gui->win)); gtk_window_set_modal(GTK_WINDOW(gui->dialog_win), TRUE); label=gtk_label_new(_("Name"));