[gnome-calendar] window: block automatic creation of nameless events



commit 955c9349562c83d0c2f58acfcd7becf714beaade
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Thu Apr 2 12:17:20 2015 -0300

    window: block automatic creation of nameless events
    
    We shouldn't let nameless events be created.
    This commit blocks all ways to create them
    when the name is not set.
    
    The user can still edit events' data.

 data/ui/window.ui |    2 ++
 src/gcal-window.c |   35 +++++++++++++++++++++++++++++++++++
 2 files changed, 37 insertions(+), 0 deletions(-)
---
diff --git a/data/ui/window.ui b/data/ui/window.ui
index 952c9b6..f2fab00 100644
--- a/data/ui/window.ui
+++ b/data/ui/window.ui
@@ -367,6 +367,7 @@
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="receives_default">True</property>
+                <property name="sensitive">False</property>
                 <signal name="clicked" handler="create_event" object="GcalWindow" swapped="yes"/>
                 <style>
                   <class name="suggested-action"/>
@@ -396,6 +397,7 @@
                 <property name="can_focus">True</property>
                 <property name="hexpand">True</property>
                 <signal name="activate" handler="create_event" object="GcalWindow" swapped="yes"/>
+                <signal name="notify::text" handler="new_event_entry_text_changed" object="GcalWindow" 
swapped="yes"/>
               </object>
               <packing>
                 <property name="left_attach">0</property>
diff --git a/src/gcal-window.c b/src/gcal-window.c
index 6334832..0b0d9ed 100644
--- a/src/gcal-window.c
+++ b/src/gcal-window.c
@@ -168,6 +168,10 @@ static void           place_new_event_widget             (GcalWindow          *w
 static void           close_new_event_widget             (GtkButton           *button,
                                                           gpointer             user_data);
 
+static void           new_event_entry_text_changed       (GObject             *object,
+                                                          GParamSpec          *pspec,
+                                                          gpointer             user_data);
+
 static void           create_notification                (GcalWindow          *window,
                                                           gchar               *message,
                                                           gchar               *button_label);
@@ -673,6 +677,34 @@ close_new_event_widget (GtkButton *button,
   set_new_event_mode (GCAL_WINDOW (user_data), FALSE);
 }
 
+static void
+new_event_entry_text_changed (GObject    *object,
+                              GParamSpec *pspec,
+                              gpointer    user_data)
+{
+  GcalWindowPrivate *priv;
+  static gboolean blocked = TRUE;
+  gint length;
+
+  g_return_if_fail (user_data);
+  priv = gcal_window_get_instance_private (GCAL_WINDOW (object));
+
+  length = g_utf8_strlen (gtk_entry_get_text (GTK_ENTRY (user_data)), -1);
+
+  gtk_widget_set_sensitive (priv->new_event_create_button, length > 0);
+
+  if (length > 0 && blocked)
+    {
+      g_signal_handlers_unblock_by_func (user_data, create_event, object);
+      blocked = FALSE;
+    }
+  else if (length < 1 && !blocked)
+    {
+      g_signal_handlers_block_by_func (user_data, create_event, object);
+      blocked = TRUE;
+    }
+}
+
 /**
  * create_notification: Internal method for creating a notification
  * @window:
@@ -1292,6 +1324,7 @@ gcal_window_class_init(GcalWindowClass *klass)
   gtk_widget_class_bind_template_callback (widget_class, create_event_detailed_cb);
   gtk_widget_class_bind_template_callback (widget_class, show_new_event_widget);
   gtk_widget_class_bind_template_callback (widget_class, close_new_event_widget);
+  gtk_widget_class_bind_template_callback (widget_class, new_event_entry_text_changed);
   gtk_widget_class_bind_template_callback (widget_class, event_activated);
 
   /* Syncronization related */
@@ -1335,6 +1368,8 @@ gcal_window_constructed (GObject *object)
   g_free (clock_format);
   g_object_unref (helper_settings);
 
+  // Prevents nameless events' creation
+  g_signal_handlers_block_by_func (priv->new_event_what_entry, create_event, object);
 
   /* header_bar: menu */
   builder = gtk_builder_new ();


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