Author: post
Date: 2012-07-28 19:06:12 +0200 (Sat, 28 Jul 2012)
New Revision: 4243
Added:
trunk/src/ui-client.xml
Modified:
trunk/src/Makefile.am
trunk/src/application.c
trunk/src/gtk-interface.c
trunk/src/rs-actions.c
trunk/src/rs-dir-selector.c
Log:
Add "Client Mode" by Camilo Polymeris for editing a single image.
Modified: trunk/src/Makefile.am
===================================================================
--- trunk/src/Makefile.am 2012-07-28 16:09:28 UTC (rev 4242)
+++ trunk/src/Makefile.am 2012-07-28 17:06:12 UTC (rev 4243)
@@ -15,7 +15,7 @@
AM_CXXFLAGS = $(AM_CFLAGS)
uidir = $(datadir)/rawstudio/
-ui_DATA = ui.xml rawstudio.gtkrc
+ui_DATA = ui.xml ui-client.xml rawstudio.gtkrc
bin_PROGRAMS = rawstudio
Modified: trunk/src/application.c
===================================================================
--- trunk/src/application.c 2012-07-28 16:09:28 UTC (rev 4242)
+++ trunk/src/application.c 2012-07-28 17:06:12 UTC (rev 4243)
@@ -641,10 +641,12 @@
gboolean do_test = FALSE;
gboolean use_system_theme = DEFAULT_CONF_USE_SYSTEM_THEME;
gchar *debug = NULL;
+ gchar *client_mode_dest = NULL;
GError *error = NULL;
GOptionContext *option_context;
const GOptionEntry option_entries[] = {
+ { "output", 'o', 0, G_OPTION_ARG_STRING, &client_mode_dest, "Run in
client mode", "target filename"},
{ "debug", 'd', 0, G_OPTION_ARG_STRING, &debug, "Debug flags to
use", "flags" },
{ "do-tests", 't', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE,
&do_test, "Do internal tests", NULL },
{ NULL }
@@ -677,6 +679,19 @@
if (debug)
rs_debug_setup(debug);
+ if (client_mode_dest)
+ {
+ /* Client mode. */
+ if (argc != 2)
+ {
+ g_printf("You must specify exactly one input
and one output image to work in client mode.\n");
+ exit(1);
+ }
+ rs_conf_set_boolean("client-mode", TRUE);
+ rs_conf_set_string("client-mode-destination",
client_mode_dest);
+ }
+ else
+ rs_conf_set_boolean("client-mode", FALSE);
gdk_threads_set_lock_functions(rs_gdk_lock, rs_gdk_unlock);
#if GLIB_MAJOR_VERSION <= 2 && GLIB_MINOR_VERSION < 31
Modified: trunk/src/gtk-interface.c
===================================================================
--- trunk/src/gtk-interface.c 2012-07-28 16:09:28 UTC (rev 4242)
+++ trunk/src/gtk-interface.c 2012-07-28 17:06:12 UTC (rev 4243)
@@ -1122,7 +1122,12 @@
{
GError *error = NULL;
ui_manager = gtk_ui_manager_new ();
- gtk_ui_manager_add_ui_from_file (ui_manager, PACKAGE_DATA_DIR
G_DIR_SEPARATOR_S PACKAGE G_DIR_SEPARATOR_S "ui.xml", &error);
+ gboolean client_mode;
+ rs_conf_get_boolean("client-mode", &client_mode);
+ if (client_mode)
+ gtk_ui_manager_add_ui_from_file (ui_manager,
PACKAGE_DATA_DIR G_DIR_SEPARATOR_S PACKAGE G_DIR_SEPARATOR_S "ui-client.xml",
&error);
+ else
+ gtk_ui_manager_add_ui_from_file (ui_manager,
PACKAGE_DATA_DIR G_DIR_SEPARATOR_S PACKAGE G_DIR_SEPARATOR_S "ui.xml", &error);
if (error)
{
g_message ("Building menus failed: %s", error->message);
@@ -1173,7 +1178,6 @@
}
}
-
static void
drag_data_received(GtkWidget *widget, GdkDragContext *drag_context,
gint x, gint y, GtkSelectionData *selection_data, guint info, guint t,
@@ -1213,7 +1217,12 @@
static gboolean
gui_window_delete(GtkWidget *widget, GdkEvent *event, gpointer user_data)
{
- rs_core_action_group_activate("Quit");
+ gboolean client_mode;
+ rs_conf_get_boolean("client-mode", &client_mode);
+ if (client_mode)
+ rs_core_action_group_activate("SaveAndQuit");
+ else
+ rs_core_action_group_activate("Quit");
return TRUE;
}
@@ -1252,7 +1261,9 @@
gtk_drag_dest_set(GTK_WIDGET(rawstudio_window), GTK_DEST_DEFAULT_ALL,
targets, 1, GDK_ACTION_COPY);
g_signal_connect((gpointer) rawstudio_window, "drag_data_received",
G_CALLBACK(drag_data_received), rs);
g_signal_connect((gpointer) rawstudio_window, "window-state-event",
G_CALLBACK(window_state_event), rs);
+// g_signal_connect((gpointer) rawstudio_window, "configure-event",
G_CALLBACK(window_configure_event), rs);
+
gtk_widget_set_name (GTK_WIDGET(rawstudio_window), "rawstudio-widget");
return(GTK_WIDGET(rawstudio_window));
@@ -1432,7 +1443,13 @@
void
rs_window_set_title(const char *str)
{
- GString *window_title = g_string_new(_("Rawstudio"));
+ GString * window_title;
+ gboolean client_mode;
+ rs_conf_get_boolean("client-mode", &client_mode);
+ if (client_mode)
+ window_title = g_string_new(_("Rawstudio Client Mode"));
+ else
+ window_title = g_string_new(_("Rawstudio"));
if (str)
{
window_title = g_string_append(window_title, " - ");
@@ -1514,10 +1531,13 @@
g_signal_connect((gpointer) rs->iconbox, "group-activated",
G_CALLBACK(group_activated), rs);
rs->store = RS_STORE(rs->iconbox);
-
+
rs_get_core_action_group(rs);
/* Build toolbox */
+ gboolean client_mode;
+ rs_conf_get_boolean("client-mode", &client_mode);
+
rs->tools = tools = rs_toolbox_new();
g_signal_connect(tools, "snapshot-changed",
G_CALLBACK(snapshot_changed), rs);
rs_toolbox_register_actions(RS_TOOLBOX(tools));
@@ -1545,10 +1565,16 @@
gtk_box_pack_start (GTK_BOX(open_box), library_expander, FALSE, TRUE,
0);
gtk_box_pack_start (GTK_BOX(open_box), directory_expander, TRUE, TRUE,
0);
- rs->toolbox = gtk_notebook_new();
- gtk_notebook_append_page(GTK_NOTEBOOK(rs->toolbox), tools,
gtk_label_new(_("Tools")));
- gtk_notebook_append_page(GTK_NOTEBOOK(rs->toolbox), batchbox,
gtk_label_new(_("Batch")));
- gtk_notebook_append_page(GTK_NOTEBOOK(rs->toolbox), open_box,
gtk_label_new(_("Open")));
+
+ if (client_mode)
+ rs->toolbox = tools;
+ else
+ {
+ rs->toolbox = gtk_notebook_new();
+ gtk_notebook_append_page(GTK_NOTEBOOK(rs->toolbox), tools,
gtk_label_new(_("Tools")));
+ gtk_notebook_append_page(GTK_NOTEBOOK(rs->toolbox), batchbox,
gtk_label_new(_("Batch")));
+ gtk_notebook_append_page(GTK_NOTEBOOK(rs->toolbox), open_box,
gtk_label_new(_("Open")));
+ }
/* Metadata infobox */
infobox = gtk_label_new("");
@@ -1583,7 +1609,10 @@
gtk_container_add (GTK_CONTAINER (rs->window), vbox);
gtk_box_pack_start (GTK_BOX (vbox), menubar, FALSE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (vbox), rs->iconbox, FALSE, TRUE, 0);
+
+ rs_conf_get_boolean("client-mode", &client_mode);
+ if (!client_mode)
+ gtk_box_pack_start (GTK_BOX (vbox), rs->iconbox, FALSE, TRUE, 0);
gtk_box_pack_start (GTK_BOX (vbox), pane, TRUE, TRUE, 0);
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
@@ -1593,6 +1622,18 @@
gboolean show_iconbox;
gboolean show_toolbox;
rs_conf_get_boolean_with_default(CONF_FULLSCREEN, &fullscreen,
DEFAULT_CONF_FULLSCREEN);
+ if (!show_iconbox)
+ rs_core_action_group_activate("Iconbox");
+ if (!show_toolbox)
+ rs_core_action_group_activate("Toolbox");
+
+ gtk_widget_show_all (rs->window);
+ toolbox_width = 240;
+ rs_conf_get_integer(CONF_TOOLBOX_WIDTH, &toolbox_width);
+ gdk_threads_enter();
+ GTK_CATCHUP();
+ gdk_threads_leave();
+
if (fullscreen)
{
rs_core_action_group_activate("Fullscreen");
@@ -1604,24 +1645,18 @@
/* Get actual state */
rs_conf_get_boolean_with_default(CONF_SHOW_ICONBOX_FULLSCREEN,
&show_iconbox, show_iconbox_default);
rs_conf_get_boolean_with_default(CONF_SHOW_TOOLBOX_FULLSCREEN,
&show_toolbox, show_toolbox_default);
+ gtk_window_get_size(rawstudio_window, &window_width, NULL);
+ gtk_paned_set_position(GTK_PANED(pane), window_width -
toolbox_width);
}
else
{
- gtk_window_get_size(rawstudio_window, &window_width, NULL);
- if (rs_conf_get_integer(CONF_TOOLBOX_WIDTH, &toolbox_width))
- gtk_paned_set_position(GTK_PANED(pane), window_width -
toolbox_width);
-
- gtk_window_unfullscreen(GTK_WINDOW(rs->window));
rs_conf_get_boolean_with_default(CONF_SHOW_ICONBOX,
&show_iconbox, DEFAULT_CONF_SHOW_TOOLBOX);
rs_conf_get_boolean_with_default(CONF_SHOW_TOOLBOX,
&show_toolbox, DEFAULT_CONF_SHOW_ICONBOX);
+ gtk_window_unfullscreen(GTK_WINDOW(rs->window));
+ gtk_window_get_size(rawstudio_window, &window_width, NULL);
+ gtk_paned_set_position(GTK_PANED(pane), window_width -
toolbox_width);
}
- if (!show_iconbox)
- rs_core_action_group_activate("Iconbox");
- if (!show_toolbox)
- rs_core_action_group_activate("Toolbox");
- gtk_widget_show_all (rs->window);
-
if (argc > 1)
{
gchar *path;
@@ -1631,10 +1666,11 @@
path = g_strdup(argv[1]);
rs_open_file_delayed(rs, path);
rs_conf_set_integer(CONF_LAST_PRIORITY_PAGE, 0);
- rs_dir_selector_expand_path(RS_DIR_SELECTOR(dir_selector),
path);
+ if (!client_mode)
+
rs_dir_selector_expand_path(RS_DIR_SELECTOR(dir_selector), path);
+
rs_window_set_title(g_path_get_dirname(path));
-
g_free(path);
}
else
Modified: trunk/src/rs-actions.c
===================================================================
--- trunk/src/rs-actions.c 2012-07-28 16:09:28 UTC (rev 4242)
+++ trunk/src/rs-actions.c 2012-07-28 17:06:12 UTC (rev 4243)
@@ -412,7 +412,47 @@
gtk_main_quit();
}
+ACTION(client_mode_quit)
+{
+ gchar *directory;
+
+ RSOutput *output = rs_output_new("RSJpegfile");
+ gchar *filename = rs_conf_get_string("client-mode-destination");
+
+ if (filename)
+ {
+ /* Create directory, if it doesn't exist */
+ directory = g_path_get_dirname(filename);
+
+ if (FALSE == g_file_test(directory, G_FILE_TEST_EXISTS |
G_FILE_TEST_IS_DIR))
+ if (g_mkdir_with_parents(directory, 0x1ff))
+ {
+ gui_status_notify(_("Could not create output
directory."));
+ return;
+ }
+ guint msg = gui_status_push(_("Auto exporting..."));
+ gui_set_busy(TRUE);
+ GTK_CATCHUP();
+ g_object_set(output, "filename", filename, NULL);
+
+ if (rs_photo_save(rs->photo, rs->filter_end, output, -1, -1,
FALSE, 1.0, rs->current_setting))
+ {
+ gchar *status = g_strdup_printf("%s (%s)", _("File
exported"), filename);
+ gui_status_notify(status);
+ g_free(status);
+ }
+ else
+ gui_status_notify(_("Export failed"));
+ gui_status_pop(msg);
+ gui_set_busy(FALSE);
+ g_free(directory);
+ }
+
+ g_object_unref(output);
+ rs_action_quit(action, rs);
+}
+
ACTION(copy_image)
{
if (!rs->photo)
@@ -985,8 +1025,11 @@
}
TOGGLEACTION(iconbox)
-{
- gui_widget_show(rs->iconbox,
gtk_toggle_action_get_active(toggleaction), CONF_SHOW_ICONBOX_FULLSCREEN,
CONF_SHOW_ICONBOX);
+{
+ gboolean client_mode;
+ rs_conf_get_boolean("client-mode", &client_mode);
+ if (!client_mode)
+ gui_widget_show(rs->iconbox,
gtk_toggle_action_get_active(toggleaction), CONF_SHOW_ICONBOX_FULLSCREEN,
CONF_SHOW_ICONBOX);
}
TOGGLEACTION(toolbox)
@@ -1020,7 +1063,11 @@
rs_conf_set_boolean(CONF_FULLSCREEN, rs->window_fullscreen);
/* Update Toolox and Iconbox */
- gui_fullscreen_changed(rs->iconbox, rs->window_fullscreen, "Iconbox",
+
+ gboolean client_mode;
+ rs_conf_get_boolean("client-mode", &client_mode);
+ if (!client_mode)
+ gui_fullscreen_changed(rs->iconbox, rs->window_fullscreen,
"Iconbox",
DEFAULT_CONF_SHOW_ICONBOX_FULLSCREEN,
DEFAULT_CONF_SHOW_ICONBOX,
CONF_SHOW_ICONBOX_FULLSCREEN, CONF_SHOW_ICONBOX);
gui_fullscreen_changed(rs->toolbox, rs->window_fullscreen, "Toolbox",
@@ -1465,6 +1512,8 @@
{ "Reload", GTK_STOCK_REFRESH, _("_Reload directory"), "<control>R",
NULL, ACTION_CB(reload) },
{ "DeleteFlagged", GTK_STOCK_DELETE, _("_Delete Flagged Photos"),
"<control><shift>D", NULL, ACTION_CB(delete_flagged) },
{ "Quit", GTK_STOCK_QUIT, _("_Quit"), "<control>Q", NULL,
ACTION_CB(quit) },
+ { "CancelAndQuit", NULL, _("_Just Quit"), NULL, NULL, ACTION_CB(quit) },
+ { "SaveAndQuit", GTK_STOCK_SAVE, _("Save & _Quit"), "<control>Q", NULL,
ACTION_CB(client_mode_quit) },
/* Edit menu */
{ "RevertSettings", GTK_STOCK_UNDO, _("_Revert Settings"),
"<control>Z", NULL, ACTION_CB(revert_settings) },
Modified: trunk/src/rs-dir-selector.c
===================================================================
--- trunk/src/rs-dir-selector.c 2012-07-28 16:09:28 UTC (rev 4242)
+++ trunk/src/rs-dir-selector.c 2012-07-28 17:06:12 UTC (rev 4243)
@@ -192,10 +192,13 @@
GString *gs = NULL;
/* Set busy cursor */
- GdkCursor* cursor = gdk_cursor_new(GDK_WATCH);
-
gdk_window_set_cursor(gtk_widget_get_toplevel(GTK_WIDGET(view))->window,
cursor);
- gdk_cursor_unref(cursor);
- gdk_flush();
+ if (GDK_IS_WINDOW(GTK_WIDGET(view)->window))
+ {
+ GdkCursor* cursor = gdk_cursor_new(GDK_WATCH);
+
gdk_window_set_cursor(gtk_widget_get_toplevel(GTK_WIDGET(view))->window,
cursor);
+ gdk_cursor_unref(cursor);
+ gdk_flush();
+ }
model = gtk_tree_view_get_model(view);
gtk_tree_model_iter_children(GTK_TREE_MODEL(model),
@@ -229,7 +232,8 @@
g_dir_close(dir);
g_free(filepath);
}
-
gdk_window_set_cursor(gtk_widget_get_toplevel(GTK_WIDGET(view))->window, NULL);
+ if (GDK_IS_WINDOW(GTK_WIDGET(view)->window))
+
gdk_window_set_cursor(gtk_widget_get_toplevel(GTK_WIDGET(view))->window, NULL);
gtk_tree_store_remove(GTK_TREE_STORE(model), &empty);
}
Added: trunk/src/ui-client.xml
===================================================================
--- trunk/src/ui-client.xml (rev 0)
+++ trunk/src/ui-client.xml 2012-07-28 17:06:12 UTC (rev 4243)
@@ -0,0 +1,82 @@
+<ui>
+ <menubar name="MainMenu">
+ <menu action="FileMenu">
+ <menuitem action="ExportAs" />
+ <menuitem action="CopyImage" />
+ <menuitem action="ResetSettings" />
+ <separator />
+ <menuitem action="CancelAndQuit" />
+ <menuitem action="SaveAndQuit" />
+ </menu>
+ <menu action="PhotoMenu">
+ <menu action="WhiteBalanceMenu">
+ <menuitem action="CameraWB" />
+ <menuitem action="AutoWB" />
+ </menu>
+ <menuitem action="Crop" />
+ <menuitem action="Uncrop" />
+ <menuitem action="Straighten" />
+ <menuitem action="Unstraighten" />
+ <menuitem action="RotateClockwise" />
+ <menuitem action="RotateCounterClockwise" />
+ <menuitem action="Flip" />
+ <menuitem action="Mirror" />
+ </menu>
+ <menu action="ViewMenu">
+ <menuitem action="ZommToFit" />
+ <menu action="SnapshotMenu">
+ <menuitem action="SnapshotA" />
+ <menuitem action="SnapshotB" />
+ <menuitem action="SnapshotC" />
+ <separator />
+ <menuitem action="SnapshotPrevious" />
+ <menuitem action="SnapshotNext" />
+ </menu>
+ <separator />
+ <menuitem action="Toolbox" />
+ <menuitem action="Fullscreen" />
+ <menuitem action="FullscreenPreview" />
+ <separator />
+ <menuitem action="ExposureMask" />
+ <menuitem action="Split" />
+ <menuitem action="Lightsout" />
+ <menuitem action="LensDbEditor" />
+ </menu>
+ <menu action="HelpMenu">
+ <menuitem action="OnlineDocumentation" />
+ <separator />
+ <menuitem action="About" />
+ </menu>
+ </menubar>
+ <popup name="PreviewPopup" action="PreviewPopup">
+ <menuitem action="ZommToFit" />
+ <separator />
+ <menuitem action="Crop" />
+ <menuitem action="Uncrop" />
+ <menuitem action="Straighten" />
+ <menuitem action="Unstraighten" />
+ <menu action="WhiteBalanceMenu">
+ <menuitem action="CameraWB" />
+ <menuitem action="AutoWB" />
+ </menu>
+ <separator />
+ <menuitem action="ExposureMask" />
+ <menuitem action="Split" />
+ <menuitem action="Lightsout" />
+ </popup>
+ <popup name="PreviewPopupRight" action="PreviewPopupRight">
+ <menuitem action="RightA" />
+ <menuitem action="RightB" />
+ <menuitem action="RightC" />
+ <separator />
+ <menuitem action="ZommToFit" />
+ <separator />
+ <menuitem action="Crop" />
+ <menuitem action="Uncrop" />
+ <menuitem action="Straighten" />
+ <menuitem action="Unstraighten" />
+ <separator />
+ <menuitem action="ExposureMask" />
+ <menuitem action="Split" />
+ </popup>
+</ui>
_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit