/*
- * Geeqie
- * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2012 The Geeqie Team
+ * Copyright (C) 2004 John Ellis
+ * Copyright (C) 2008 - 2016 The Geeqie Team
*
* Author: John Ellis
*
- * This software is released under the GNU General Public License (GNU GPL).
- * Please read the included file COPYING for more information.
- * This software comes with no warranty of any kind, use at your own risk!
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-
#include "main.h"
#include "fullscreen.h"
fs->hide_mouse_id = g_timeout_add(FULL_SCREEN_HIDE_MOUSE_DELAY, fullscreen_hide_mouse_cb, fs);
}
-static gboolean fullscreen_mouse_moved(GtkWidget *widget, GdkEventButton *bevent, gpointer data)
+static gboolean fullscreen_mouse_moved(GtkWidget *widget, GdkEventMotion *event, gpointer data)
{
FullScreenData *fs = data;
gint x, y;
gint w, h;
GdkGeometry geometry;
- GdkWindow *gdkwin;
if (!window || !imd) return NULL;
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) */
+ g_signal_connect(G_OBJECT(fs->window), "delete_event",
+ G_CALLBACK(fullscreen_delete_cb), fs);
+
+ /* few cosmetic details */
gtk_window_set_decorated(GTK_WINDOW(fs->window), FALSE);
+ gtk_container_set_border_width(GTK_CONTAINER(fs->window), 0);
- 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
- {
+ /* 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);
- 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);
+ /* 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);
- 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;
/* By setting USER_POS and USER_SIZE, most window managers will
* not request positioning of the full screen window (for example twm).
*
* 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);
gtk_widget_destroy(fs->window);
+ gtk_window_present(GTK_WINDOW(fs->normal_window));
+
g_free(fs);
}
GtkWidget *combo;
GtkListStore *store;
GtkCellRenderer *renderer;
- GtkWidget *button = NULL;
GList *list;
GList *work;
gint current = 0;
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;