[drwright] Store break interval and work interval in seconds



commit 644d6776678e294f01b3d910f0b75a3329439d75
Author: Christian Persch <chpe gnome org>
Date:   Mon Feb 7 21:10:17 2011 +0100

    Store break interval and work interval in seconds
    
    Unfortunately, that means that migration from gconf doesn't work,
    so don't install the conversion file.
    
    Bug #627194.

 src/Makefile.am                                    |    4 +-
 src/drw-break-window.c                             |    2 +-
 src/drw-cc-panel.c                                 |   79 +++++++++++++++++++-
 src/drwright-panel.glade                           |   62 +---------------
 src/drwright.c                                     |    4 +-
 ...ings-daemon.plugins.typing-break.gschema.xml.in |   10 +-
 6 files changed, 90 insertions(+), 71 deletions(-)
---
diff --git a/src/Makefile.am b/src/Makefile.am
index 496cec7..d3deb59 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -136,8 +136,8 @@ desktop_DATA = $(desktop_in_files:.desktop.in=.desktop)
 gsettings_schemas_in_files = org.gnome.settings-daemon.plugins.typing-break.gschema.xml.in
 gsettings_SCHEMAS = $(gsettings_schemas_in_files:.gschema.xml.in=.gschema.xml)
 
-gsettings_convertdir = $(datadir)/GConf/gsettings
-dist_gsettings_convert_DATA = drwright.convert
+# gsettings_convertdir = $(datadir)/GConf/gsettings
+# dist_gsettings_convert_DATA = drwright.convert
 
 @GSETTINGS_RULES@
 @INTLTOOL_XML_NOMERGE_RULE@
diff --git a/src/drw-break-window.c b/src/drw-break-window.c
index b0a89a6..97aae70 100644
--- a/src/drw-break-window.c
+++ b/src/drw-break-window.c
@@ -131,7 +131,7 @@ drw_break_window_init (DrwBreakWindow *window)
 
         priv->settings = g_settings_new (DRW_SETTINGS_SCHEMA_ID);
 
-	priv->break_time = 60 * g_settings_get_int (priv->settings, "break-time");
+	priv->break_time = g_settings_get_int (priv->settings, "break-time");
 
         allow_postpone = g_settings_get_boolean (priv->settings, "allow-postpone");
 
diff --git a/src/drw-cc-panel.c b/src/drw-cc-panel.c
index 7c63f50..9e20575 100644
--- a/src/drw-cc-panel.c
+++ b/src/drw-cc-panel.c
@@ -22,6 +22,9 @@
 
 #include <config.h>
 
+#include <errno.h>
+#include <string.h>
+
 #include "drw-cc-panel.h"
 
 #define DRW_SETTINGS_SCHEMA_ID "org.gnome.settings-daemon.plugins.typing-break"
@@ -37,6 +40,64 @@ struct _DrwCcPanelPrivate
 };
 #endif
 
+static int
+spinbutton_input_cb (GtkWidget *button,
+                     gpointer *ret,
+                     gpointer user_data)
+{
+  const char *text;
+  char *end;
+  gint64 value, v;
+
+  text = gtk_entry_get_text (GTK_ENTRY (button));
+
+  value = 0;
+  do {
+    value *= 60;
+
+    errno = 0;
+    end = NULL;
+    v = strtoll (text, &end, 10);
+    if (errno ||
+        !end || (*end != '\0' && *end != ':') ||
+        v < 0 || v >= 60) {
+      return GTK_INPUT_ERROR;
+    }
+
+    value += v;
+    text = strchr (text, ':');
+    if (text)
+      text++;
+  } while (text);
+
+  * (gdouble *) ret = value;
+  return TRUE;
+}
+
+static gboolean
+spinbutton_output_cb (GtkSpinButton *button,
+                      gpointer user_data)
+{
+  char buf[64];
+  int value;
+  int h, m, s;
+
+  value = (int) (gtk_spin_button_get_value (button) + .5);
+
+  h = value / 3600;
+  value %= 3600;
+  m = value / 60;
+  s = value % 60;
+
+  if (h > 0)
+    g_snprintf (buf, sizeof (buf), "%u:%02u:%02u", h, m, s);
+  else
+    g_snprintf (buf, sizeof (buf), "%u:%02u", m, s);
+
+  gtk_entry_set_text (GTK_ENTRY (button), buf);
+  return TRUE;
+}
+
 static void
 drw_cc_panel_get_property (GObject    *object,
                                guint       property_id,
@@ -126,12 +187,26 @@ drw_cc_panel_init (DrwCcPanel *self)
                    gtk_builder_get_object (builder, "inner-box"),
                    "sensitive",
                    G_SETTINGS_BIND_GET);
+  widget = (GtkWidget *) gtk_builder_get_object (builder, "work-interval-spinbutton");
+  gtk_entry_set_width_chars (GTK_ENTRY (widget), 8);
+  gtk_entry_set_alignment (GTK_ENTRY (widget), 1.0);
+  g_signal_connect (widget, "input",
+                    G_CALLBACK (spinbutton_input_cb), NULL);
+  g_signal_connect (widget, "output",
+                    G_CALLBACK (spinbutton_output_cb), NULL);
   g_settings_bind (settings, "type-time",
-                   gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (gtk_builder_get_object (builder, "work-interval-spinbutton"))),
+                   gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (widget)),
                    "value",
                    G_SETTINGS_BIND_DEFAULT);
+  widget = (GtkWidget *) gtk_builder_get_object (builder, "break-interval-spinbutton");
+  gtk_entry_set_width_chars (GTK_ENTRY (widget), 8);
+  gtk_entry_set_alignment (GTK_ENTRY (widget), 1.0);
+  g_signal_connect (widget, "input",
+                    G_CALLBACK (spinbutton_input_cb), NULL);
+  g_signal_connect (widget, "output",
+                    G_CALLBACK (spinbutton_output_cb), NULL);
   g_settings_bind (settings, "break-time",
-                   gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (gtk_builder_get_object (builder, "break-interval-spinbutton"))),
+                   gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (widget)),
                    "value",
                    G_SETTINGS_BIND_DEFAULT);
   g_settings_bind (settings, "allow-postpone",
diff --git a/src/drwright-panel.glade b/src/drwright-panel.glade
index 108452f..0758544 100644
--- a/src/drwright-panel.glade
+++ b/src/drwright-panel.glade
@@ -66,7 +66,7 @@
 		<widget class="GtkTable" id="table33">
 		  <property name="visible">True</property>
 		  <property name="n_rows">2</property>
-		  <property name="n_columns">3</property>
+		  <property name="n_columns">2</property>
 		  <property name="homogeneous">False</property>
 		  <property name="row_spacing">6</property>
 		  <property name="column_spacing">12</property>
@@ -101,62 +101,6 @@
 		  </child>
 
 		  <child>
-		    <widget class="GtkLabel" id="work-minutes-label">
-		      <property name="visible">True</property>
-		      <property name="label" translatable="yes">minutes</property>
-		      <property name="use_underline">False</property>
-		      <property name="use_markup">False</property>
-		      <property name="justify">GTK_JUSTIFY_LEFT</property>
-		      <property name="wrap">False</property>
-		      <property name="selectable">False</property>
-		      <property name="xalign">0</property>
-		      <property name="yalign">0.5</property>
-		      <property name="xpad">0</property>
-		      <property name="ypad">0</property>
-		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-		      <property name="width_chars">-1</property>
-		      <property name="single_line_mode">False</property>
-		      <property name="angle">0</property>
-		    </widget>
-		    <packing>
-		      <property name="left_attach">2</property>
-		      <property name="right_attach">3</property>
-		      <property name="top_attach">0</property>
-		      <property name="bottom_attach">1</property>
-		      <property name="x_options">fill</property>
-		      <property name="y_options"></property>
-		    </packing>
-		  </child>
-
-		  <child>
-		    <widget class="GtkLabel" id="break-minutes-label">
-		      <property name="visible">True</property>
-		      <property name="label" translatable="yes">minutes</property>
-		      <property name="use_underline">False</property>
-		      <property name="use_markup">False</property>
-		      <property name="justify">GTK_JUSTIFY_LEFT</property>
-		      <property name="wrap">False</property>
-		      <property name="selectable">False</property>
-		      <property name="xalign">0</property>
-		      <property name="yalign">0.5</property>
-		      <property name="xpad">0</property>
-		      <property name="ypad">0</property>
-		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-		      <property name="width_chars">-1</property>
-		      <property name="single_line_mode">False</property>
-		      <property name="angle">0</property>
-		    </widget>
-		    <packing>
-		      <property name="left_attach">2</property>
-		      <property name="right_attach">3</property>
-		      <property name="top_attach">1</property>
-		      <property name="bottom_attach">2</property>
-		      <property name="x_options">fill</property>
-		      <property name="y_options"></property>
-		    </packing>
-		  </child>
-
-		  <child>
 		    <widget class="GtkLabel" id="work-interval-label">
 		      <property name="visible">True</property>
 		      <property name="label" translatable="yes">_Work interval lasts:</property>
@@ -195,7 +139,7 @@
 		      <property name="update_policy">GTK_UPDATE_ALWAYS</property>
 		      <property name="snap_to_ticks">False</property>
 		      <property name="wrap">False</property>
-		      <property name="adjustment">60 5 120 1 5 5</property>
+		      <property name="adjustment">3600 300 7200 60 300 0</property>
 		    </widget>
 		    <packing>
 		      <property name="left_attach">1</property>
@@ -217,7 +161,7 @@
 		      <property name="update_policy">GTK_UPDATE_ALWAYS</property>
 		      <property name="snap_to_ticks">False</property>
 		      <property name="wrap">False</property>
-		      <property name="adjustment">3 1 60 1 2 2</property>
+		      <property name="adjustment">60 30 3600 10 30 0</property>
 		    </widget>
 		    <packing>
 		      <property name="left_attach">1</property>
diff --git a/src/drwright.c b/src/drwright.c
index 89854d6..9074797 100644
--- a/src/drwright.c
+++ b/src/drwright.c
@@ -561,11 +561,11 @@ settings_change_cb (GSettings  *settings,
         dr->state = STATE_START;
 
         if (!key || key == I_("type-time")) {
-                dr->type_time = 60 * g_settings_get_int (settings, "type-time");
+                dr->type_time = g_settings_get_int (settings, "type-time");
                 dr->warn_time = MIN (dr->type_time / 10, WARN_TIME_MAX);
 	}
 	if (!key || key == I_("break-time")) {
-                dr->break_time = 60 * g_settings_get_int (settings, "break-time");
+                dr->break_time = g_settings_get_int (settings, "break-time");
 	}
 	if (!key || key == I_("enabled")) {
                 GtkAction *action;
diff --git a/src/org.gnome.settings-daemon.plugins.typing-break.gschema.xml.in b/src/org.gnome.settings-daemon.plugins.typing-break.gschema.xml.in
index fac3a92..372d8d8 100644
--- a/src/org.gnome.settings-daemon.plugins.typing-break.gschema.xml.in
+++ b/src/org.gnome.settings-daemon.plugins.typing-break.gschema.xml.in
@@ -33,14 +33,14 @@
       <_summary>Whether the typing break can be postponed</_summary>
     </key>
     <key name="type-time" type="i">
-      <range min="5" max="120" />
-      <default>60</default>
+      <range min="300" max="7200" />
+      <default>3600</default>
       <_summary>Number of minutes of typing time before break mode starts</_summary>
     </key>
     <key name="break-time" type="i">
-      <range min="1" max="60" />
-      <default>3</default>
-      <_summary>Number of minutes that the typing break should last</_summary>
+      <range min="30" max="3600" />
+      <default>180</default>
+      <_summary>Number of seconds that the typing break should last</_summary>
     </key>
     <key name="unlock-phrase" type="s">
       <default>''</default>



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