Signed-off-by: Jakub Filak <[email protected]>
---
 src/gtk-helpers/event_config_dialog.c | 104 ++++++++++++++++------------------
 1 file changed, 48 insertions(+), 56 deletions(-)

diff --git a/src/gtk-helpers/event_config_dialog.c 
b/src/gtk-helpers/event_config_dialog.c
index 94cd1ea..a067511 100644
--- a/src/gtk-helpers/event_config_dialog.c
+++ b/src/gtk-helpers/event_config_dialog.c
@@ -21,7 +21,6 @@
 
 static GtkWindow *g_event_list_window;
 static GList *option_widget_list;
-static GtkWidget *g_adv_option_table;
 static bool has_password_option;
 
 enum
@@ -68,22 +67,20 @@ static void on_show_pass_store_cb(GtkToggleButton *tb, 
gpointer user_data)
     set_user_setting("store_passwords", gtk_toggle_button_get_active(tb) ? 
"no" : "yes");
 }
 
-static unsigned grow_table_by_1(GtkTable *table)
+static unsigned add_one_row_to_grid(GtkGrid *table)
 {
-    guint rows, columns;
-    //needs gtk 2.22: gtk_table_get_size(table, &rows, &columns);
-    g_object_get(table, "n-rows", &rows, NULL);
-    g_object_get(table, "n-columns", &columns, NULL);
-    gtk_table_resize(table, rows + 1, columns);
+    gulong rows = (gulong)g_object_get_data(G_OBJECT(table), "n-rows");
+    gtk_grid_insert_row(table, rows);
+    g_object_set_data(G_OBJECT(table), "n-rows", (gpointer)(rows + 1));
     return rows;
 }
 
 static void add_option_to_table(gpointer data, gpointer user_data)
 {
     event_option_t *option = data;
-    GtkTable *option_table = user_data;
+    GtkGrid *option_table = user_data;
     if (option->is_advanced)
-        option_table = GTK_TABLE(g_adv_option_table);
+        option_table = GTK_GRID(g_object_get_data(G_OBJECT(option_table), 
"advanced-options"));
 
     GtkWidget *label;
     GtkWidget *option_input;
@@ -107,32 +104,27 @@ static void add_option_to_table(gpointer data, gpointer 
user_data)
         case OPTION_TYPE_TEXT:
         case OPTION_TYPE_NUMBER:
         case OPTION_TYPE_PASSWORD:
-            last_row = grow_table_by_1(option_table);
+            last_row = add_one_row_to_grid(option_table);
             label = gtk_label_new_justify_left(option_label);
-            gtk_table_attach(option_table, label,
-                             /*left,right_attach:*/ 0, 1,
-                             /*top,bottom_attach:*/ last_row, last_row+1,
-                             /*x,yoptions:*/ GTK_FILL, GTK_FILL,
-                             /*x,ypadding:*/ 0, 0);
+            gtk_grid_attach(option_table, label,
+                             /*left,top:*/ 0, last_row,
+                             /*width,height:*/ 1, 1);
             option_input = gtk_entry_new();
+            gtk_widget_set_hexpand(option_input, TRUE);
             if (option->eo_value != NULL)
                 gtk_entry_set_text(GTK_ENTRY(option_input), option->eo_value);
-            gtk_table_attach(option_table, option_input,
-                             /*left,right_attach:*/ 1, 2,
-                             /*top,bottom_attach:*/ last_row, last_row+1,
-                             /*x,yoptions:*/ GTK_FILL | GTK_EXPAND, GTK_FILL,
-                             /*x,ypadding:*/ 0, 0);
+            gtk_grid_attach(option_table, option_input,
+                             /*left,top:*/ 1, last_row,
+                             /*width,height:*/ 1, 1);
             add_option_widget(option_input, option);
             if (option->eo_type == OPTION_TYPE_PASSWORD)
             {
                 gtk_entry_set_visibility(GTK_ENTRY(option_input), 0);
-                last_row = grow_table_by_1(option_table);
+                last_row = add_one_row_to_grid(option_table);
                 GtkWidget *pass_cb = gtk_check_button_new_with_label(_("Show 
password"));
-                gtk_table_attach(option_table, pass_cb,
-                             /*left,right_attach:*/ 1, 2,
-                             /*top,bottom_attach:*/ last_row, last_row+1,
-                             /*x,yoptions:*/ GTK_FILL, GTK_FILL,
-                             /*x,ypadding:*/ 0, 0);
+                gtk_grid_attach(option_table, pass_cb,
+                             /*left,top:*/ 1, last_row,
+                             /*width,height:*/ 1, 1);
                 g_signal_connect(pass_cb, "toggled", 
G_CALLBACK(on_show_pass_cb), option_input);
                 has_password_option = true;
             }
@@ -144,22 +136,18 @@ static void add_option_to_table(gpointer data, gpointer 
user_data)
             gtk_misc_set_alignment(GTK_MISC(label), /*x,yalign:*/ 0.0, 0.0);
             make_label_autowrap_on_resize(GTK_LABEL(label));
 
-            last_row = grow_table_by_1(option_table);
-            gtk_table_attach(option_table, label,
-                             /*left,right_attach:*/ 0, 2,
-                             /*top,bottom_attach:*/ last_row, last_row+1,
-                             /*x,yoptions:*/ GTK_FILL, GTK_FILL,
-                             /*x,ypadding:*/ 0, 0);
+            last_row = add_one_row_to_grid(option_table);
+            gtk_grid_attach(option_table, label,
+                             /*left,top:*/ 0, last_row,
+                             /*width,height:*/ 2, 1);
             break;
 
         case OPTION_TYPE_BOOL:
-            last_row = grow_table_by_1(option_table);
+            last_row = add_one_row_to_grid(option_table);
             option_input = gtk_check_button_new_with_label(option_label);
-            gtk_table_attach(option_table, option_input,
-                             /*left,right_attach:*/ 0, 2,
-                             /*top,bottom_attach:*/ last_row, last_row+1,
-                             /*x,yoptions:*/ GTK_FILL, GTK_FILL,
-                             /*x,ypadding:*/ 0, 0);
+            gtk_grid_attach(option_table, option_input,
+                             /*left,top:*/ 0, last_row,
+                             /*width,height:*/ 2, 1);
             if (option->eo_value != NULL)
                 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(option_input),
                                     string_to_bool(option->eo_value));
@@ -180,12 +168,10 @@ static void add_option_to_table(gpointer data, gpointer 
user_data)
         gtk_misc_set_alignment(GTK_MISC(label), /*x,yalign:*/ 0.0, 0.0);
         make_label_autowrap_on_resize(GTK_LABEL(label));
 
-        last_row = grow_table_by_1(option_table);
-        gtk_table_attach(option_table, label,
-                             /*left,right_attach:*/ 1, 2,
-                             /*top,bottom_attach:*/ last_row, last_row+1,
-                             /*x,yoptions:*/ GTK_FILL, GTK_FILL,
-                             /*x,ypadding:*/ 0, 0);
+        last_row = add_one_row_to_grid(option_table);
+        gtk_grid_attach(option_table, label,
+                             /*left,top:*/ 1, last_row,
+                             /*top,heigh:*/ 1, 1);
     }
 
     free(option_label);
@@ -335,18 +321,26 @@ int show_event_config_dialog(const char *event_name, 
GtkWindow *parent)
                 gtk_window_get_icon_name(parent_window));
     }
 
-    GtkWidget *option_table = gtk_table_new(/*rows*/ 0, /*cols*/ 2, 
/*homogeneous*/ FALSE);
-    gtk_table_set_row_spacings(GTK_TABLE(option_table), 2);
+    GtkWidget *option_table = gtk_grid_new();
+    gtk_grid_set_row_homogeneous(GTK_GRID(option_table), FALSE);
+    gtk_grid_set_column_homogeneous(GTK_GRID(option_table), FALSE);
+    gtk_grid_set_row_spacing(GTK_GRID(option_table), 2);
+    g_object_set_data(G_OBJECT(option_table), "n-rows", (gpointer)-1);
 
     /* table to hold advanced options
      * hidden in expander which is visible only if there's at least
      * one advanced option
     */
 
-    g_adv_option_table = gtk_table_new(/*rows*/ 0, /*cols*/ 2, /*homogeneous*/ 
FALSE);
-    gtk_table_set_row_spacings(GTK_TABLE(g_adv_option_table), 2);
+    GtkWidget *adv_option_table = gtk_grid_new();
+    gtk_grid_set_row_homogeneous(GTK_GRID(adv_option_table), FALSE);
+    gtk_grid_set_column_homogeneous(GTK_GRID(adv_option_table), FALSE);
+    gtk_grid_set_row_spacing(GTK_GRID(adv_option_table), 2);
+    g_object_set_data(G_OBJECT(adv_option_table), "n-rows", (gpointer)-1);
+
     GtkWidget *adv_expander = gtk_expander_new(_("Advanced"));
-    gtk_container_add(GTK_CONTAINER(adv_expander), g_adv_option_table);
+    gtk_container_add(GTK_CONTAINER(adv_expander), adv_option_table);
+    g_object_set_data(G_OBJECT(option_table), "advanced-options", 
adv_option_table);
 
     has_password_option = false;
     g_list_foreach(event->options, &add_option_to_table, option_table);
@@ -354,13 +348,11 @@ int show_event_config_dialog(const char *event_name, 
GtkWindow *parent)
     /* if there is at least one password option, add checkbox to disable 
storing passwords */
     if (has_password_option)
     {
-        unsigned last_row = grow_table_by_1(GTK_TABLE(option_table));
+        unsigned last_row = add_one_row_to_grid(GTK_GRID(option_table));
         GtkWidget *pass_store_cb = gtk_check_button_new_with_label(_("Don't 
store passwords"));
-        gtk_table_attach(GTK_TABLE(option_table), pass_store_cb,
-                /*left,right_attach:*/ 0, 1,
-                /*top,bottom_attach:*/ last_row, last_row+1,
-                /*x,yoptions:*/ GTK_FILL, GTK_FILL,
-                /*x,ypadding:*/ 0, 0);
+        gtk_grid_attach(GTK_GRID(option_table), pass_store_cb,
+                /*left,top:*/ 0, last_row,
+                /*width,height:*/ 1, 1);
         const char *store_passwords = get_user_setting("store_passwords");
         if (store_passwords && !strcmp(store_passwords, "no"))
             gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pass_store_cb), 1);
@@ -371,7 +363,7 @@ int show_event_config_dialog(const char *event_name, 
GtkWindow *parent)
     gtk_box_pack_start(GTK_BOX(content), option_table, false, false, 20);
 
     /* add the adv_option_table to the dialog only if there is some adv option 
*/
-    if 
(g_list_length(gtk_container_get_children(GTK_CONTAINER(g_adv_option_table))) > 
0)
+    if 
(g_list_length(gtk_container_get_children(GTK_CONTAINER(adv_option_table))) > 0)
         gtk_box_pack_start(GTK_BOX(content), adv_expander, false, false, 0);
 
     /* add warning if secrets service is not available showing the nagging 
dialog
-- 
1.7.11.4

Reply via email to