gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r19951 - gnunet-gtk/src/fs


From: gnunet
Subject: [GNUnet-SVN] r19951 - gnunet-gtk/src/fs
Date: Wed, 22 Feb 2012 19:37:01 +0100

Author: grothoff
Date: 2012-02-22 19:37:01 +0100 (Wed, 22 Feb 2012)
New Revision: 19951

Modified:
   gnunet-gtk/src/fs/gnunet-fs-gtk.c
Log:
LRN: Save-and-restore-window-position-and-size

Modified: gnunet-gtk/src/fs/gnunet-fs-gtk.c
===================================================================
--- gnunet-gtk/src/fs/gnunet-fs-gtk.c   2012-02-22 18:35:30 UTC (rev 19950)
+++ gnunet-gtk/src/fs/gnunet-fs-gtk.c   2012-02-22 18:37:01 UTC (rev 19951)
@@ -93,6 +93,55 @@
 
 
 /**
+ * Obtains main window position and size before it's destroyed
+ * and saves these into user's config file.
+ *
+ * @param main_window main window widget
+ */
+static void
+main_window_save_position (GtkWidget *main_window)
+{
+  GdkWindow *main_window_gdk;
+
+  gint window_x, window_y, window_width, window_height, maximized;
+  GdkWindowState window_state;
+  struct GNUNET_CONFIGURATION_Handle *cfg;
+  struct GNUNET_CONFIGURATION_Handle *cfgDefault;
+  cfgDefault = GNUNET_CONFIGURATION_create ();
+  (void) GNUNET_CONFIGURATION_load (cfgDefault, NULL); /* load defaults only */
+
+  /* FIXME: is it safe to discard const qualifier? */
+  cfg = (struct GNUNET_CONFIGURATION_Handle *)
+      GNUNET_GTK_main_loop_get_configuration (ml);
+
+  main_window_gdk = gtk_widget_get_window (main_window);
+  maximized = GNUNET_YES;
+  if (NULL != main_window_gdk)
+  {
+    window_state = gdk_window_get_state (main_window_gdk);
+    if (!(window_state & GDK_WINDOW_STATE_MAXIMIZED))
+      maximized = GNUNET_NO;
+  }
+
+  gtk_window_get_position (GTK_WINDOW (main_window), &window_x, &window_y);
+  gtk_window_get_size (GTK_WINDOW (main_window), &window_width, 
&window_height);
+
+  GNUNET_CONFIGURATION_set_value_number (cfg, "gnunet-gtk",
+      "MAIN_WINDOW_X", window_x);
+  GNUNET_CONFIGURATION_set_value_number (cfg, "gnunet-gtk",
+      "MAIN_WINDOW_Y", window_y);
+  GNUNET_CONFIGURATION_set_value_number (cfg, "gnunet-gtk",
+      "MAIN_WINDOW_WIDTH", window_width);
+  GNUNET_CONFIGURATION_set_value_number (cfg, "gnunet-gtk",
+      "MAIN_WINDOW_HEIGHT", window_height);
+  GNUNET_CONFIGURATION_set_value_string (cfg, "gnunet-gtk",
+      "MAIN_WINDOW_MAXIMIZED", maximized == GNUNET_YES ? "YES" : "NO");
+
+  GNUNET_CONFIGURATION_write_diffs (cfgDefault, cfg, "~/.gnunet/gnunet.conf");
+  GNUNET_CONFIGURATION_destroy (cfgDefault);
+}
+
+/**
  * Task run on shutdown.
  * FIXME-STYLE: does this need to be a separate task!?
  *
@@ -120,6 +169,10 @@
 void
 GNUNET_GTK_quit_cb (GObject * object, gpointer user_data)
 {
+  GtkWidget *main_window = GTK_WIDGET (object);
+
+  main_window_save_position (main_window);
+
   GNUNET_GTK_tray_icon_destroy ();
   GNUNET_SCHEDULER_add_with_priority (GNUNET_SCHEDULER_PRIORITY_IDLE,
                                       &shutdown_task, NULL);
@@ -138,6 +191,10 @@
 {
   GtkWidget *main_window;
   GtkTreeView *metadata_tree;
+  unsigned long long dl_parallel, req_parallel, window_x, window_y,
+      window_width, window_height;
+  int maximized;
+  const struct GNUNET_CONFIGURATION_Handle *cfg; 
 
   ml = cls;
 
@@ -148,7 +205,37 @@
   main_window =
       GTK_WIDGET (GNUNET_FS_GTK_get_main_window_object
                   ("GNUNET_GTK_main_window"));
-  gtk_window_maximize (GTK_WINDOW (main_window));
+
+  cfg = GNUNET_GTK_main_loop_get_configuration (ml);
+
+  if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_number (cfg, "gnunet-gtk",
+      "MAIN_WINDOW_X", &window_x))
+    window_x = ULONG_MAX;
+  if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_number (cfg, "gnunet-gtk",
+      "MAIN_WINDOW_Y", &window_y))
+    window_y = ULONG_MAX;
+  if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_number (cfg, "gnunet-gtk",
+      "MAIN_WINDOW_WIDTH", &window_width))
+    window_width = ULONG_MAX;
+  if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_number (cfg, "gnunet-gtk",
+      "MAIN_WINDOW_HEIGHT", &window_height))
+    window_height = ULONG_MAX;
+  if (GNUNET_SYSERR == (maximized = GNUNET_CONFIGURATION_get_value_yesno (cfg,
+      "gnunet-gtk", "MAIN_WINDOW_MAXIMIZED")))
+    maximized = GNUNET_YES;
+
+  if (window_x == ULONG_MAX || window_y == ULONG_MAX ||
+      window_width == ULONG_MAX || window_height == ULONG_MAX ||
+      maximized == GNUNET_YES)
+  {
+    /* If anything is wrong - play safe and show it maximized */
+    gtk_window_maximize (GTK_WINDOW (main_window));
+  }
+  else
+  {
+    gtk_window_move (GTK_WINDOW (main_window), window_x, window_y);
+    gtk_window_resize (GTK_WINDOW (main_window), window_width, window_height);
+  }
   
   /* Allow multiple selection in metadata view; */
   /* FIXME-GTK3: this can be done within (modern versions of) glade */
@@ -161,12 +248,26 @@
   GNUNET_GTK_tray_icon_create (GTK_WINDOW (main_window),
                                "gnunet-fs-gtk",
                                "gnunet-fs-gtk");
+
+  /* FIXME: should these '1's be here? Maybe better to put them into
+   * default config files?
+   */
+  if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_number (cfg, "gnunet-gtk",
+      "MAX_PARALLEL_DOWNLOADS", &dl_parallel))
+    dl_parallel = 1;
+  if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_number (cfg, "gnunet-gtk",
+      "MAX_PARALLEL_REQUESTS", &req_parallel))
+    req_parallel = 1;
+
   /* initialize file-sharing */
-  fs = GNUNET_FS_start (GNUNET_GTK_main_loop_get_configuration (ml), 
-                       "gnunet-fs-gtk",
+  fs = GNUNET_FS_start (cfg, "gnunet-fs-gtk",
                        &GNUNET_GTK_fs_event_handler, NULL, 
                        GNUNET_FS_FLAGS_NONE | GNUNET_FS_FLAGS_PERSISTENCE 
                                                 /* | GNUNET_FS_FLAGS_DO_PROBES 
*/ ,
+                        GNUNET_FS_OPTIONS_DOWNLOAD_PARALLELISM,
+                        (unsigned int) dl_parallel,
+                        GNUNET_FS_OPTIONS_REQUEST_PARALLELISM,
+                        (unsigned int) req_parallel,
                         GNUNET_FS_OPTIONS_END);
   if (NULL == fs)
   {




reply via email to

[Prev in Thread] Current Thread [Next in Thread]