Mercurial > hg > forks > geeqie
changeset 2300:5256cfa521f6
Merge merge request 379
* github/merge-requests/379:
'Stay above' option now works independently of screen for fullscreen window
Fix fullscreen - remove all the garbage which breaks things and let Gtk do its job.
author | Klaus Ethgen <Klaus@Ethgen.de> |
---|---|
date | Thu, 28 Apr 2016 19:41:15 +0100 |
parents | 4d0008b449d6 (current diff) e093199a85de (diff) |
children | dec8d9db5770 |
files | |
diffstat | 1 files changed, 27 insertions(+), 46 deletions(-) [+] |
line wrap: on
line diff
--- a/src/fullscreen.c Tue Apr 26 15:52:12 2016 +0100 +++ b/src/fullscreen.c Thu Apr 28 19:41:15 2016 +0100 @@ -214,7 +214,6 @@ gint x, y; gint w, h; GdkGeometry geometry; - GdkWindow *gdkwin; if (!window || !imd) return NULL; @@ -234,35 +233,30 @@ fs->window = window_new(GTK_WINDOW_TOPLEVEL, "fullscreen", NULL, NULL, _("Full screen")); - /* this requests no decorations, if you still have them complain to the window manager author(s) */ - gtk_window_set_decorated(GTK_WINDOW(fs->window), FALSE); - - if (options->fullscreen.screen < 0) - { - /* If we want control of the window size and position this is not what we want. - * Geeqie needs control of which monitor(s) to use for full screen. - */ - gtk_window_fullscreen(GTK_WINDOW(fs->window)); - } - else - { - gtk_window_set_screen(GTK_WINDOW(fs->window), screen); - if (options->fullscreen.above) - gtk_window_set_keep_above(GTK_WINDOW(fs->window), TRUE); - } - - gtk_window_set_resizable(GTK_WINDOW(fs->window), FALSE); - gtk_container_set_border_width(GTK_CONTAINER(fs->window), 0); g_signal_connect(G_OBJECT(fs->window), "delete_event", G_CALLBACK(fullscreen_delete_cb), fs); - geometry.min_width = w; - geometry.min_height = h; - geometry.max_width = w; - geometry.max_height = h; - geometry.base_width = w; - geometry.base_height = h; - geometry.win_gravity = GDK_GRAVITY_STATIC; + /* few cosmetic details */ + gtk_window_set_decorated(GTK_WINDOW(fs->window), FALSE); + gtk_container_set_border_width(GTK_CONTAINER(fs->window), 0); + + /* make window fullscreen -- let Gtk do it's job, don't screw it in any way */ + gtk_window_fullscreen(GTK_WINDOW(fs->window)); + + /* move it to requested screen */ + if (options->fullscreen.screen >= 0) { + gtk_window_set_screen(GTK_WINDOW(fs->window), screen); + } + + /* keep window above others, if requested */ + if (options->fullscreen.above) { + gtk_window_set_keep_above(GTK_WINDOW(fs->window), TRUE); + } + + /* set default size and position, so the window appears where it was before */ + gtk_window_set_default_size(GTK_WINDOW(fs->window), w, h); + gtk_window_move(GTK_WINDOW(fs->window), x, y); + /* By setting USER_POS and USER_SIZE, most window managers will * not request positioning of the full screen window (for example twm). * @@ -270,18 +264,15 @@ * decorations of twm to not effect the requested window position, * the decorations will simply be off screen, except in multi monitor setups :-/ */ + geometry.min_width = 1; + geometry.min_height = 1; + geometry.base_width = w; + geometry.base_height = h; + geometry.win_gravity = GDK_GRAVITY_STATIC; gtk_window_set_geometry_hints(GTK_WINDOW(fs->window), fs->window, &geometry, - GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE | GDK_HINT_BASE_SIZE | - GDK_HINT_WIN_GRAVITY | - GDK_HINT_USER_POS); - - gtk_window_set_default_size(GTK_WINDOW(fs->window), w, h); - gtk_window_move(GTK_WINDOW(fs->window), x, y); + GDK_HINT_WIN_GRAVITY | GDK_HINT_USER_POS | GDK_HINT_USER_SIZE); gtk_widget_realize(fs->window); - gdkwin = gtk_widget_get_window(fs->window); - if (gdkwin != NULL) - gdk_window_set_override_redirect(gdkwin, TRUE); fs->imd = image_new(FALSE); @@ -637,7 +628,6 @@ GtkWidget *combo; GtkListStore *store; GtkCellRenderer *renderer; - GtkWidget *button = NULL; GList *list; GList *work; gint current = 0; @@ -658,15 +648,6 @@ gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo), renderer, "text", FS_MENU_COLUMN_NAME, NULL); - if (above_value) - { - button = pref_checkbox_new_int(vbox, _("Stay above other windows"), - *above_value, above_value); - gtk_widget_set_sensitive(button, *screen_value != -1); - - g_object_set_data(G_OBJECT(combo), BUTTON_ABOVE_KEY, button); - } - fullscreen_prefs_selection_add(store, _("Determined by Window Manager"), -1); fullscreen_prefs_selection_add(store, _("Active screen"), 0); if (*screen_value == 0) current = 1;