Author: post
Date: 2010-10-26 23:37:14 +0200 (Tue, 26 Oct 2010)
New Revision: 3589
Modified:
trunk/src/application.h
trunk/src/gtk-interface.c
trunk/src/gtk-interface.h
trunk/src/rs-actions.c
trunk/src/rs-preview-widget.c
trunk/src/ui.xml
Log:
Add fullscreen preview in secondary monitor. Works fine, but needs to remember
settings and handle more than 2 monitors.
Modified: trunk/src/application.h
===================================================================
--- trunk/src/application.h 2010-10-26 00:17:03 UTC (rev 3588)
+++ trunk/src/application.h 2010-10-26 21:37:14 UTC (rev 3589)
@@ -70,6 +70,7 @@
GtkWidget *tools;
GtkWidget *toolbox;
GtkWidget *preview;
+ GtkWidget *window_preview_screen;
/* Generic filter chain */
RSFilter *filter_input;
Modified: trunk/src/gtk-interface.c
===================================================================
--- trunk/src/gtk-interface.c 2010-10-26 00:17:03 UTC (rev 3588)
+++ trunk/src/gtk-interface.c 2010-10-26 21:37:14 UTC (rev 3589)
@@ -49,6 +49,8 @@
GtkWindow *rawstudio_window;
static gint busycount = 0;
static GtkWidget *infobox = NULL;
+static GtkWidget *frame_preview_toolbox = NULL;
+static GtkWidget *preview_fullscreen_filler = NULL;
GdkGC *dashed;
GdkGC *grid;
@@ -367,6 +369,85 @@
}
static void
+gui_enable_preview_screen(RS_BLOB *rs, const gchar *screen_name)
+{
+ GdkDisplay *open_display = gdk_display_open(screen_name);
+ GdkScreen *open_screen = gdk_display_get_default_screen(open_display);
+ if (NULL == open_screen)
+ {
+ gui_status_notify(_("Unable to locate screen for offscreen
preview"));
+ return;
+ }
+ rs->window_preview_screen = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_screen(GTK_WINDOW(rs->window_preview_screen),
open_screen);
+ gtk_window_maximize(GTK_WINDOW(rs->window_preview_screen));
+ gtk_window_fullscreen(GTK_WINDOW(rs->window_preview_screen));
+ g_object_set(GTK_WINDOW(rs->window_preview_screen),
+ "accept-focus", FALSE,
+ NULL);
+
+ /* Re-parent preview*/
+ gtk_widget_reparent(rs->preview, rs->window_preview_screen);
+
+ /* Add something to the preview area */
+ preview_fullscreen_filler = gtk_label_new(_("Press F10 to return
preview to this window"));
+ gtk_container_add(GTK_CONTAINER(frame_preview_toolbox),
preview_fullscreen_filler);
+
+ gtk_widget_show_all(rs->window_preview_screen);
+}
+
+void
+gui_disable_preview_screen(RS_BLOB *rs)
+{
+ gtk_container_remove(GTK_CONTAINER(frame_preview_toolbox),
preview_fullscreen_filler);
+ gtk_widget_reparent(rs->preview, frame_preview_toolbox);
+ gtk_widget_destroy(rs->window_preview_screen);
+}
+
+void
+gui_select_preview_screen(RS_BLOB *rs)
+{
+ GdkDisplay *display = gdk_display_get_default();
+ int num_screens = gdk_display_get_n_screens(display);
+
+ if (num_screens <= 1)
+ {
+ gui_status_notify(_("Unable to detect more than one display.
Cannot open offscreen preview"));
+ return;
+ }
+
+ /* Get information about current screen */
+ GdkScreen *main_screen;
+ main_screen = gtk_window_get_screen(GTK_WINDOW(rs->window));
+ gchar *main_screen_name = gdk_screen_make_display_name(main_screen);
+
+ /* If two displays, just open on the other */
+// if (num_screens == 2)
+// {
+ GdkScreen *first_screen = gdk_display_get_screen(display, 0);
+ gchar *first_screen_name =
gdk_screen_make_display_name(first_screen);
+ GdkScreen *second_screen = gdk_display_get_screen(display, 1);
+ gchar *second_screen_name =
gdk_screen_make_display_name(second_screen);
+ if (!g_strcmp0(first_screen_name, main_screen_name))
+ {
+ gui_enable_preview_screen(rs, second_screen_name);
+ }
+ else if (!g_strcmp0(second_screen_name, main_screen_name))
+ {
+ gui_enable_preview_screen(rs, first_screen_name);
+ }
+ else
+ gui_status_notify(_("Unable to locate current display.
Cannot open offscreen preview"));
+
+ g_free(first_screen_name);
+ g_free(second_screen_name);
+// }
+// else
+// /* Pop up selection box */
+ g_free(main_screen_name);
+}
+
+static void
gui_preference_use_system_theme(GtkToggleButton *togglebutton, gpointer
user_data)
{
if (togglebutton->active)
@@ -1223,9 +1304,10 @@
/* Split pane below iconbox */
pane = gtk_hpaned_new ();
+ frame_preview_toolbox = gtk_frame_new(NULL);
+ gtk_container_add(GTK_CONTAINER(frame_preview_toolbox), rs->preview);
g_signal_connect_after(G_OBJECT(pane), "notify::position",
G_CALLBACK(pane_position), NULL);
-
- gtk_paned_pack1 (GTK_PANED (pane), rs->preview, TRUE, TRUE);
+ gtk_paned_pack1 (GTK_PANED (pane), frame_preview_toolbox, TRUE, TRUE);
gtk_paned_pack2 (GTK_PANED (pane), rs->toolbox, FALSE, TRUE);
/* Vertical packing box */
Modified: trunk/src/gtk-interface.h
===================================================================
--- trunk/src/gtk-interface.h 2010-10-26 00:17:03 UTC (rev 3588)
+++ trunk/src/gtk-interface.h 2010-10-26 21:37:14 UTC (rev 3589)
@@ -40,6 +40,8 @@
extern void gui_widget_show(GtkWidget *widget, gboolean show, const gchar
*conf_fullscreen_key, const gchar *conf_windowed_key);
extern void gui_make_preference_window(RS_BLOB *rs);
extern void rs_window_set_title(const char *str);
+extern void gui_select_preview_screen(RS_BLOB *rs);
+extern void gui_disable_preview_screen(RS_BLOB *rs);
extern GtkWindow *rawstudio_window;
extern GdkGC *dashed;
Modified: trunk/src/rs-actions.c
===================================================================
--- trunk/src/rs-actions.c 2010-10-26 00:17:03 UTC (rev 3588)
+++ trunk/src/rs-actions.c 2010-10-26 21:37:14 UTC (rev 3589)
@@ -889,6 +889,21 @@
rs_core_action_group_set_sensivity("Lightsout", !rs->window_fullscreen);
}
+TOGGLEACTION(fullscreen_preview)
+{
+ if (gtk_toggle_action_get_active(toggleaction))
+ {
+ rs_core_action_group_set_sensivity("Lightsout", FALSE);
+ gui_select_preview_screen(rs);
+ }
+ else
+ {
+ gui_disable_preview_screen(rs);
+ rs_core_action_group_set_sensivity("Lightsout",
!rs->window_fullscreen);
+ }
+// rs_conf_set_boolean(CONF_FULLSCREEN, rs->window_fullscreen);
+}
+
TOGGLEACTION(exposure_mask)
{
if (gtk_toggle_action_get_active(toggleaction))
@@ -1244,6 +1259,7 @@
{ "Iconbox", NULL, _("_Iconbox"), "<control>I", NULL,
ACTION_CB(iconbox), TRUE },
{ "Toolbox", NULL, _("_Toolbox"), "<control>T", NULL,
ACTION_CB(toolbox), TRUE },
{ "Fullscreen", GTK_STOCK_FULLSCREEN, _("_Fullscreen"), "F11", NULL,
ACTION_CB(fullscreen), FALSE },
+ { "FullscreenPreview", GTK_STOCK_FULLSCREEN, _("_Show Preview On
Secondary Monitor"), "F10", NULL, ACTION_CB(fullscreen_preview), FALSE },
{ "ShowFilenames", NULL, _("Show Filenames in Iconbox"), NULL, NULL,
ACTION_CB(show_filenames), show_filenames },
{ "Load8Bit", NULL, _("Load non-RAW images"), NULL, NULL,
ACTION_CB(load_8bit), load_8bit },
{ "ExposureMask", NULL, _("_Exposure mask"), "<control>E", NULL,
ACTION_CB(exposure_mask), FALSE },
Modified: trunk/src/rs-preview-widget.c
===================================================================
--- trunk/src/rs-preview-widget.c 2010-10-26 00:17:03 UTC (rev 3588)
+++ trunk/src/rs-preview-widget.c 2010-10-26 21:37:14 UTC (rev 3589)
@@ -1894,6 +1894,8 @@
GdkWindow *window = GTK_WIDGET(preview->canvas)->window;
const gint view = get_view_from_coord(preview, x, y);
GtkUIManager *ui_manager = gui_get_uimanager();
+ GdkScreen *preview_screen = gtk_widget_get_screen(GTK_WIDGET(preview));
+ gint screen_number = gdk_screen_get_monitor_at_point(preview_screen,
x,y);
gint real_x, real_y;
gint scaled_x, scaled_y;
gboolean inside_image = get_image_coord(preview, view, x, y, &scaled_x,
&scaled_y, &real_x, &real_y, NULL, NULL);
@@ -1922,11 +1924,15 @@
if (view==0)
{
GtkWidget *menu = gtk_ui_manager_get_widget
(ui_manager, "/PreviewPopup");
+ gtk_menu_set_screen(GTK_MENU(menu), preview_screen);
+ gtk_menu_set_monitor(GTK_MENU(menu),screen_number);
gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL,
0, GDK_CURRENT_TIME);
}
else
{
GtkWidget *menu = gtk_ui_manager_get_widget
(ui_manager, "/PreviewPopupRight");
+ gtk_menu_set_screen(GTK_MENU(menu), preview_screen);
+ gtk_menu_set_monitor(GTK_MENU(menu),screen_number);
gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL,
0, GDK_CURRENT_TIME);
}
}
Modified: trunk/src/ui.xml
===================================================================
--- trunk/src/ui.xml 2010-10-26 00:17:03 UTC (rev 3588)
+++ trunk/src/ui.xml 2010-10-26 21:37:14 UTC (rev 3589)
@@ -68,6 +68,7 @@
<menuitem action="Iconbox" />
<menuitem action="Toolbox" />
<menuitem action="Fullscreen" />
+ <menuitem action="FullscreenPreview" />
<separator />
<menuitem action="ShowFilenames" />
<menuitem action="Load8Bit" />
_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit