Author: post
Date: 2010-05-28 19:00:42 +0200 (Fri, 28 May 2010)
New Revision: 3403

Modified:
   trunk/librawstudio/conf_interface.h
   trunk/src/gtk-interface.c
Log:
Rawstudio now remembers window state and size.

Modified: trunk/librawstudio/conf_interface.h
===================================================================
--- trunk/librawstudio/conf_interface.h 2010-05-28 16:54:49 UTC (rev 3402)
+++ trunk/librawstudio/conf_interface.h 2010-05-28 17:00:42 UTC (rev 3403)
@@ -66,6 +66,11 @@
 #define CONF_LIBRARY_TAG_SEARCH "library_tag_search"
 #define CONF_EXPORT_AS_FOLDER "export_as_folder"
 #define CONF_EXPORT_AS_SIZE_PERCENT "export_as_size_percent"
+#define CONF_MAIN_WINDOW_WIDTH "main_window_width"
+#define CONF_MAIN_WINDOW_HEIGHT "main_window_height"
+#define CONF_MAIN_WINDOW_POS_X "main_window_pos_x"
+#define CONF_MAIN_WINDOW_POS_Y "main_window_pos_y"
+#define CONF_MAIN_WINDOW_MAXIMIZED "main_window_maximized"
 
 #define DEFAULT_CONF_EXPORT_FILENAME "%f_%2c"
 #define DEFAULT_CONF_BATCH_DIRECTORY "batch_exports/"
@@ -92,6 +97,11 @@
 #define DEFAULT_CONF_USE_SYSTEM_THEME FALSE
 #define DEFAULT_CONF_SHOW_FILENAMES FALSE
 #define DEFAULT_CONF_LIBRARY_AUTOTAG FALSE
+#define DEFAULT_CONF_MAIN_WINDOW_WIDTH 800
+#define DEFAULT_CONF_MAIN_WINDOW_HEIGHT 600
+#define DEFAULT_CONF_MAIN_WINDOW_POS_X 50
+#define DEFAULT_CONF_MAIN_WINDOW_POS_Y 50
+#define DEFAULT_CONF_MAIN_WINDOW_MAXIMIZED FALSE
 
 /* get the last working directory from gconf */
 void rs_set_last_working_directory(const char *lwd);

Modified: trunk/src/gtk-interface.c
===================================================================
--- trunk/src/gtk-interface.c   2010-05-28 16:54:49 UTC (rev 3402)
+++ trunk/src/gtk-interface.c   2010-05-28 17:00:42 UTC (rev 3403)
@@ -774,6 +774,36 @@
 }
 
 static void
+window_state_event(GtkWidget *widget, GdkEventWindowState *event, gpointer 
user_data)
+{
+       GtkWindow *window = GTK_WINDOW(widget);
+       gint width,height,pos_x,pos_y;
+       gboolean maximized;
+
+       switch (event->type)
+       {
+               case GDK_WINDOW_STATE:
+               {
+                       maximized = !!(event->new_window_state & 
GDK_WINDOW_STATE_MAXIMIZED);
+                       rs_conf_set_boolean(CONF_MAIN_WINDOW_MAXIMIZED, 
maximized);
+                       if (!maximized)
+                       { 
+                               gtk_window_get_size(window, &width, &height);
+                               gtk_window_get_position(window, &pos_x, &pos_y);
+                               rs_conf_set_integer(CONF_MAIN_WINDOW_WIDTH, 
width);
+                               rs_conf_set_integer(CONF_MAIN_WINDOW_HEIGHT, 
height);
+                               rs_conf_set_integer(CONF_MAIN_WINDOW_POS_X, 
pos_x);
+                               rs_conf_set_integer(CONF_MAIN_WINDOW_POS_Y, 
pos_y);
+                       }
+                       break;
+               }
+               default:
+                       break;
+       }
+}
+
+
+static void
 drag_data_received(GtkWidget *widget, GdkDragContext *drag_context,
        gint x, gint y, GtkSelectionData *selection_data, guint info, guint t,
        RS_BLOB *rs)
@@ -821,14 +851,36 @@
 {
        static const GtkTargetEntry targets[] = { { "text/uri-list", 0, 0 } };
 
+       gint width = DEFAULT_CONF_MAIN_WINDOW_WIDTH;
+       gint height = DEFAULT_CONF_MAIN_WINDOW_HEIGHT;
+       gint pos_x = DEFAULT_CONF_MAIN_WINDOW_POS_X;
+       gint pos_y = DEFAULT_CONF_MAIN_WINDOW_POS_Y;
+       gboolean maximized;
+       rs_conf_get_integer(CONF_MAIN_WINDOW_WIDTH, &width);
+       rs_conf_get_integer(CONF_MAIN_WINDOW_HEIGHT, &height);
+       rs_conf_get_integer(CONF_MAIN_WINDOW_POS_X, &pos_x);
+       rs_conf_get_integer(CONF_MAIN_WINDOW_POS_Y, &pos_y);
+       rs_conf_get_boolean_with_default(CONF_MAIN_WINDOW_MAXIMIZED, 
&maximized, DEFAULT_CONF_MAIN_WINDOW_MAXIMIZED);
+
        rawstudio_window = GTK_WINDOW(gtk_window_new (GTK_WINDOW_TOPLEVEL));
-       gtk_window_resize((GtkWindow *) rawstudio_window, 800, 600);
+       if (!maximized)
+       {
+//             gtk_window_set_position((GtkWindow *) rawstudio_window, 
GTK_WIN_POS_NONE);
+//             gtk_window_move((GtkWindow *) rawstudio_window, pos_x, pos_y);
+               gtk_window_resize((GtkWindow *) rawstudio_window, width, 
height);
+       }
+       else
+       {
+               gtk_window_maximize((GtkWindow *) rawstudio_window);
+       }
+
        rs_window_set_title(NULL);
        g_signal_connect((gpointer) rawstudio_window, "delete_event", 
G_CALLBACK(gui_window_delete), NULL);
        g_signal_connect((gpointer) rawstudio_window, "key_press_event", 
G_CALLBACK(window_key_press_event), NULL);
 
        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);
 
        gtk_widget_set_name (GTK_WIDGET(rawstudio_window), "rawstudio-widget");
 


_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit

Reply via email to