Skip to content

Commit

Permalink
gtk: workaround gtk2 vte resize issue
Browse files Browse the repository at this point in the history
Hack isn't pretty, but gets the job done.
See source code comment for details.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
  • Loading branch information
kraxel committed May 26, 2014
1 parent 82fc180 commit 6fa2769
Showing 1 changed file with 40 additions and 0 deletions.
40 changes: 40 additions & 0 deletions ui/gtk.c
Expand Up @@ -85,6 +85,20 @@
# define VTE_CHECK_VERSION(a, b, c) 0
#endif

#if defined(CONFIG_VTE) && !GTK_CHECK_VERSION(3, 0, 0)
/*
* The gtk2 vte terminal widget seriously messes up the window resize
* for some reason. You basically can't make the qemu window smaller
* any more because the toplevel window geoemtry hints are overridden.
*
* Workaround that by hiding all vte widgets, except the one in the
* current tab.
*
* Luckily everything works smooth in gtk3.
*/
# define VTE_RESIZE_HACK 1
#endif

/* Compatibility define to let us build on both Gtk2 and Gtk3 */
#if GTK_CHECK_VERSION(3, 0, 0)
static inline void gdk_drawable_get_size(GdkWindow *w, gint *ww, gint *wh)
Expand Down Expand Up @@ -1301,10 +1315,21 @@ static void gd_change_page(GtkNotebook *nb, gpointer arg1, guint arg2,
return;
}

#ifdef VTE_RESIZE_HACK
vc = gd_vc_find_current(s);
if (vc && vc->type == GD_VC_VTE) {
gtk_widget_hide(vc->vte.terminal);
}
#endif
vc = gd_vc_find_by_page(s, arg2);
if (!vc) {
return;
}
#ifdef VTE_RESIZE_HACK
if (vc->type == GD_VC_VTE) {
gtk_widget_show(vc->vte.terminal);
}
#endif
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(vc->menu_item),
TRUE);
on_vga = (vc->type == GD_VC_GFX);
Expand Down Expand Up @@ -1845,6 +1870,21 @@ void gtk_display_init(DisplayState *ds, bool full_screen, bool grab_on_hover)

gtk_widget_show_all(s->window);

#ifdef VTE_RESIZE_HACK
{
VirtualConsole *cur = gd_vc_find_current(s);
int i;

for (i = 0; i < s->nb_vcs; i++) {
VirtualConsole *vc = &s->vc[i];
if (vc && vc->type == GD_VC_VTE && vc != cur) {
gtk_widget_hide(vc->vte.terminal);
}
}
gd_update_windowsize(cur);
}
#endif

if (full_screen) {
gtk_menu_item_activate(GTK_MENU_ITEM(s->full_screen_item));
}
Expand Down

0 comments on commit 6fa2769

Please sign in to comment.