[evolution] I#448 - Meeting Editor: Use toggle for the attendees' RSVP column



commit ac6cb993b02664184cc52fa101f6bb1c5b3e9f72
Author: Milan Crha <mcrha redhat com>
Date:   Tue May 28 14:31:19 2019 +0200

    I#448 - Meeting Editor: Use toggle for the attendees' RSVP column
    
    Closes https://gitlab.gnome.org/GNOME/evolution/issues/448

 src/calendar/gui/e-meeting-list-view.c | 36 ++++++++++----------------
 src/calendar/gui/e-meeting-store.c     | 47 ++++++++--------------------------
 2 files changed, 24 insertions(+), 59 deletions(-)
---
diff --git a/src/calendar/gui/e-meeting-list-view.c b/src/calendar/gui/e-meeting-list-view.c
index 9c4ebbd669..48d5feabaa 100644
--- a/src/calendar/gui/e-meeting-list-view.c
+++ b/src/calendar/gui/e-meeting-list-view.c
@@ -199,17 +199,6 @@ get_role_strings (void)
        return strings;
 }
 
-static GList *
-get_rsvp_strings (void)
-{
-       GList *strings = NULL;
-
-       strings = g_list_append (strings, (gchar *) _("Yes"));
-       strings = g_list_append (strings, (gchar *) _("No"));
-
-       return strings;
-}
-
 static GList *
 get_status_strings (void)
 {
@@ -542,12 +531,12 @@ role_edited_cb (GtkCellRenderer *renderer,
 }
 
 static void
-rsvp_edited_cb (GtkCellRenderer *renderer,
-                const gchar *path,
-                const gchar *text,
-                GtkTreeView *view)
+rsvp_toggled_cb (GtkCellRendererToggle *renderer,
+                const gchar *path,
+                GtkTreeView *view)
 {
-       value_edited (view, E_MEETING_STORE_RSVP_COL, path, text);
+       value_edited (view, E_MEETING_STORE_RSVP_COL, path,
+               (!gtk_cell_renderer_toggle_get_active (renderer)) ? "1" : NULL);
 }
 
 static void
@@ -684,19 +673,19 @@ build_table (EMeetingListView *lview)
                G_CALLBACK (role_edited_cb), view);
        g_hash_table_insert (edit_table, GINT_TO_POINTER (E_MEETING_STORE_ROLE_COL), renderer);
 
-       renderer = create_combo_cell_renderer (get_rsvp_strings ());
+       renderer = gtk_cell_renderer_toggle_new ();
        pos = gtk_tree_view_insert_column_with_attributes (
                /* To translators: RSVP means "please reply" */
                view, -1, _("RSVP"), renderer,
-               "text", E_MEETING_STORE_RSVP_COL,
+               "active", E_MEETING_STORE_RSVP_COL,
                NULL);
        col = gtk_tree_view_get_column (view, pos -1);
        gtk_tree_view_column_set_resizable (col, TRUE);
        gtk_tree_view_column_set_reorderable (col, TRUE);
        g_object_set_data (G_OBJECT (col), "mtg-store-col", GINT_TO_POINTER (E_MEETING_STORE_RSVP_COL));
        g_signal_connect (
-               renderer, "edited",
-               G_CALLBACK (rsvp_edited_cb), view);
+               renderer, "toggled",
+               G_CALLBACK (rsvp_toggled_cb), view);
        g_hash_table_insert (edit_table, GINT_TO_POINTER (E_MEETING_STORE_RSVP_COL), renderer);
 
        renderer = create_combo_cell_renderer (get_status_strings ());
@@ -737,7 +726,7 @@ change_edit_cols_for_user (gpointer key,
                        g_object_set (renderer, "editable", FALSE, NULL);
                        break;
                case E_MEETING_STORE_RSVP_COL:
-                       g_object_set (renderer, "editable", TRUE, NULL);
+                       g_object_set (renderer, "activatable", TRUE, NULL);
                        break;
                case E_MEETING_STORE_STATUS_COL:
                        g_object_set (renderer, "editable", TRUE, NULL);
@@ -753,7 +742,10 @@ change_edit_cols_for_organizer (gpointer key,
        GtkCellRenderer *renderer = (GtkCellRenderer *) value;
        guint edit_level = GPOINTER_TO_INT (user_data);
 
-       g_object_set (renderer, "editable", GINT_TO_POINTER (edit_level), NULL);
+       if (GTK_IS_CELL_RENDERER_TOGGLE (renderer))
+               g_object_set (renderer, "activatable", GINT_TO_POINTER (edit_level), NULL);
+       else
+               g_object_set (renderer, "editable", GINT_TO_POINTER (edit_level), NULL);
 }
 
 static void
diff --git a/src/calendar/gui/e-meeting-store.c b/src/calendar/gui/e-meeting-store.c
index 3a02fceb62..c3ba8cefc7 100644
--- a/src/calendar/gui/e-meeting-store.c
+++ b/src/calendar/gui/e-meeting-store.c
@@ -171,24 +171,6 @@ role_to_text (ICalParameterRole role)
        }
 }
 
-static gboolean
-text_to_boolean (const gchar *role)
-{
-       if (!e_util_utf8_strcasecmp (role, _("Yes")))
-               return TRUE;
-       else
-               return FALSE;
-}
-
-static gchar *
-boolean_to_text (gboolean b)
-{
-       if (b)
-               return _("Yes");
-       else
-               return _("No");
-}
-
 static ICalParameterPartstat
 text_to_partstat (const gchar *partstat)
 {
@@ -261,7 +243,6 @@ get_column_type (GtkTreeModel *model,
        case E_MEETING_STORE_MEMBER_COL:
        case E_MEETING_STORE_TYPE_COL:
        case E_MEETING_STORE_ROLE_COL:
-       case E_MEETING_STORE_RSVP_COL:
        case E_MEETING_STORE_DELTO_COL:
        case E_MEETING_STORE_DELFROM_COL:
        case E_MEETING_STORE_STATUS_COL:
@@ -269,6 +250,8 @@ get_column_type (GtkTreeModel *model,
        case E_MEETING_STORE_LANGUAGE_COL:
        case E_MEETING_STORE_ATTENDEE_COL:
                return G_TYPE_STRING;
+       case E_MEETING_STORE_RSVP_COL:
+               return G_TYPE_BOOLEAN;
        case E_MEETING_STORE_ATTENDEE_UNDERLINE_COL:
                return PANGO_TYPE_UNDERLINE;
        default:
@@ -363,10 +346,9 @@ get_value (GtkTreeModel *model,
                        e_meeting_attendee_get_role (attendee)));
                break;
        case E_MEETING_STORE_RSVP_COL:
-               g_value_init (value, G_TYPE_STRING);
-               g_value_set_string (
-                       value, boolean_to_text (
-                       e_meeting_attendee_get_rsvp (attendee)));
+               g_value_init (value, G_TYPE_BOOLEAN);
+               g_value_set_boolean (
+                       value, e_meeting_attendee_get_rsvp (attendee));
                break;
        case E_MEETING_STORE_DELTO_COL:
                g_value_init (value, G_TYPE_STRING);
@@ -562,7 +544,7 @@ e_meeting_store_set_value (EMeetingStore *store,
                e_meeting_attendee_set_role (attendee, text_to_role (val));
                break;
        case E_MEETING_STORE_RSVP_COL:
-               e_meeting_attendee_set_rsvp (attendee, text_to_boolean (val));
+               e_meeting_attendee_set_rsvp (attendee, val != NULL);
                break;
        case E_MEETING_STORE_DELTO_COL:
                e_meeting_attendee_set_delto (attendee, val);
@@ -1081,29 +1063,20 @@ EMeetingAttendee *
 e_meeting_store_add_attendee_with_defaults (EMeetingStore *store)
 {
        EMeetingAttendee *attendee;
-       gchar *str;
 
        attendee = E_MEETING_ATTENDEE (e_meeting_attendee_new ());
 
        e_meeting_attendee_set_address (attendee, "");
        e_meeting_attendee_set_member (attendee, "");
 
-       str = g_strdup (_("Individual"));
-       e_meeting_attendee_set_cutype (attendee, text_to_type (str));
-       g_free (str);
-       str = g_strdup (_("Required Participant"));
-       e_meeting_attendee_set_role (attendee, text_to_role (str));
-       g_free (str);
-       str = g_strdup (_("Yes"));
-       e_meeting_attendee_set_rsvp (attendee, text_to_boolean (str));
-       g_free (str);
+       e_meeting_attendee_set_cutype (attendee, text_to_type (_("Individual")));
+       e_meeting_attendee_set_role (attendee, text_to_role (_("Required Participant")));
+       e_meeting_attendee_set_rsvp (attendee, TRUE);
 
        e_meeting_attendee_set_delto (attendee, "");
        e_meeting_attendee_set_delfrom (attendee, "");
 
-       str = g_strdup (_("Needs Action"));
-       e_meeting_attendee_set_partstat (attendee, text_to_partstat (str));
-       g_free (str);
+       e_meeting_attendee_set_partstat (attendee, text_to_partstat (_("Needs Action")));
 
        e_meeting_attendee_set_cn (attendee, "");
        e_meeting_attendee_set_language (attendee, "en");


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