From d007346fb0aafba55473b281aa9a010c0434ca44 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Paul=20H=C3=A4nsch?= Date: Wed, 29 Jul 2026 15:48:04 +0200 Subject: [PATCH] tidying up action code --- gladerunner.c | 139 +++++++++++++++++++++++++++----------------------- 1 file changed, 76 insertions(+), 63 deletions(-) diff --git a/gladerunner.c b/gladerunner.c index aa85482..b79d75a 100644 --- a/gladerunner.c +++ b/gladerunner.c @@ -9,6 +9,9 @@ static GtkBuilder *builder = NULL; static int chldin[2], chldout[2]; +// pre declaration +void init_widgets(gpointer wp, gpointer data); + // typedef struct wdg_command { // GType wdg; // const char *cmd; @@ -78,16 +81,6 @@ void e_cmi_toggled(GtkWidget *wdg, gpointer d) { ); } -gboolean s_switch_state_set(GtkWidget *wdg, gboolean state, gpointer d) { - GtkSwitch *s = GTK_SWITCH(wdg); - printf( - "STATE-SET %s %i\n", - gtk_buildable_get_name(GTK_BUILDABLE(wdg)), - state - ); - return 0; -} - void e_entry_activate(GtkWidget *wdg, gpointer user_data) { GtkEntry *e = GTK_ENTRY(wdg); printf( @@ -106,6 +99,16 @@ void e_entry_changed(GtkWidget *wdg, gpointer user_data) { ); } +gboolean s_switch_state_set(GtkWidget *wdg, gboolean state, gpointer d) { + GtkSwitch *s = GTK_SWITCH(wdg); + printf( + "STATE-SET %s %i\n", + gtk_buildable_get_name(GTK_BUILDABLE(wdg)), + state + ); + return 0; +} + // ====== CLI ACTIONS ====== void a_text_view_set(GtkTextView *v, char *c) { @@ -114,7 +117,60 @@ void a_text_view_set(GtkTextView *v, char *c) { ); } +void a_listbox_add(GtkListBox *w, char *arg) { + GtkWidget *wdg; + if (wdg = GTK_WIDGET(gtk_builder_get_object(builder, arg))) { + gtk_list_box_insert(w, wdg, -1); + //gtk_widget_set_visible(wdg, TRUE); + } else { + dprintf(STDERR_FILENO, "Unknown Widget-ID: %s\n", arg); + } +} + +void a_listbox_remove(GtkListBox *w, char *arg) { + // ListBox children are silently wrapped into a GtkListBoxRow + // so we really detroy that wrapper after removing the child + GtkWidget *wdg, *p; + if (wdg = GTK_WIDGET(gtk_builder_get_object(builder, arg))) { + p = gtk_widget_get_parent(wdg); + gtk_container_remove(GTK_CONTAINER(p), wdg); + gtk_widget_destroy(p); + } else { + dprintf(STDERR_FILENO, "Unknown Widget-ID: %s\n", arg); + } +} + +void a_builder_load(char *file) { + GSList *widgets; GError *gerr = NULL; + + if ( ! gtk_builder_add_from_file(builder, file, &gerr) ) { + dprintf(STDERR_FILENO, "Error during \"load\": %s\n", gerr->message); + free(gerr); + } else { + widgets = gtk_builder_get_objects(builder); + g_slist_foreach(widgets, *init_widgets, NULL); + g_slist_free(widgets); + } +} + +void a_builder_add(char *xml) { + GSList *widgets; GError *gerr = NULL; + + if ( ! gtk_builder_add_from_string(builder, xml, -1, &gerr) ) { + dprintf(STDERR_FILENO, "Error during \"add\": %s\n", gerr->message); + free(gerr); + } else { + widgets = gtk_builder_get_objects(builder); + g_slist_foreach(widgets, *init_widgets, NULL); + g_slist_free(widgets); + } +} + + +// ====== CLI ACTIONS PARSING ====== + int a_editable(GtkEditable *w, char *cmd, char *args) { + printf("ED\n"); if (!w || !cmd || !cmd[0]) return 0; else if (!strcmp(cmd, "lock")) gtk_editable_set_editable(w, FALSE); else if (!strcmp(cmd, "unlock")) gtk_editable_set_editable(w, TRUE); @@ -130,6 +186,11 @@ int a_widget(GtkWidget *w, char *cmd, char *args) { else return 0; return 1; } + +// Toggle Button, Toggle Tool Button, and Check Menu Item are all forms of +// check boxes and radio buttons, depending on whether they appear in +// a drop down menu, in a tool bar, or elsewhere. + int a_tb(GtkToggleButton *w, char *cmd, char *args) { if (!w || !cmd || !cmd[0]) return 0; else if (!strcmp(cmd, "check")) gtk_toggle_button_set_active(w, TRUE); @@ -164,34 +225,14 @@ int a_entry(GtkEntry *w, char *cmd, char *args) { } int a_text_view(GtkTextView *w, char *cmd, char *args) { if (!w || !cmd || !cmd[0]) return 0; - else if (!strcmp(cmd, "set")) a_text_view_set(w, args); + else if (!strcmp(cmd, "set")) a_text_view_set(w, args); + // text view is unrelated to editable + else if (!strcmp(cmd, "lock")) gtk_text_view_set_editable(w, FALSE); + else if (!strcmp(cmd, "unlock")) gtk_text_view_set_editable(w, TRUE); else return 0; return 1; } -void a_listbox_add(GtkListBox *w, char *arg) { - GtkWidget *wdg; - if (wdg = GTK_WIDGET(gtk_builder_get_object(builder, arg))) { - gtk_list_box_insert(w, wdg, -1); - //gtk_widget_set_visible(wdg, TRUE); - } else { - dprintf(STDERR_FILENO, "Unknown Widget-ID: %s\n", arg); - } -} - -void a_listbox_remove(GtkListBox *w, char *arg) { - // ListBox children are silently wrapped into a GtkListBoxRow - // so we really detroy that wrapper after removing the child - GtkWidget *wdg, *p; - if (wdg = GTK_WIDGET(gtk_builder_get_object(builder, arg))) { - p = gtk_widget_get_parent(wdg); - gtk_container_remove(GTK_CONTAINER(p), wdg); - gtk_widget_destroy(p); - } else { - dprintf(STDERR_FILENO, "Unknown Widget-ID: %s\n", arg); - } -} - int a_listbox(GtkListBox *w, char *cmd, char *args) { if (!w || !cmd || !cmd[0]) return 0; else if (!strcmp(cmd, "add")) a_listbox_add(w, args); @@ -200,34 +241,6 @@ int a_listbox(GtkListBox *w, char *cmd, char *args) { return 1; } -void init_widgets(gpointer wp, gpointer data); - -void a_builder_load(char *file) { - GSList *widgets; GError *gerr = NULL; - - if ( ! gtk_builder_add_from_file(builder, file, &gerr) ) { - dprintf(STDERR_FILENO, "Error during \"load\": %s\n", gerr->message); - free(gerr); - } else { - widgets = gtk_builder_get_objects(builder); - g_slist_foreach(widgets, *init_widgets, NULL); - g_slist_free(widgets); - } -} - -void a_builder_add(char *xml) { - GSList *widgets; GError *gerr = NULL; - - if ( ! gtk_builder_add_from_string(builder, xml, -1, &gerr) ) { - dprintf(STDERR_FILENO, "Error during \"add\": %s\n", gerr->message); - free(gerr); - } else { - widgets = gtk_builder_get_objects(builder); - g_slist_foreach(widgets, *init_widgets, NULL); - g_slist_free(widgets); - } -} - int a_builder(char *cmd, char *args) { if (!cmd || !cmd[0]) return 0; else if (!strcmp(cmd, "load")) a_builder_load(args); @@ -253,8 +266,8 @@ int action(char *cli) { || (GTK_IS_TOGGLE_TOOL_BUTTON(wdg) && a_ttb(GTK_TOGGLE_TOOL_BUTTON(wdg), cmd, args)) || (GTK_IS_ENTRY(wdg) && a_entry(GTK_ENTRY(wdg), cmd, args)) || (GTK_IS_LIST_BOX(wdg) && a_listbox(GTK_LIST_BOX(wdg), cmd, args)) - || (GTK_IS_TEXT_VIEW(wdg) && a_text_view(GTK_TEXT_VIEW(wdg), cmd, args)) || (GTK_IS_EDITABLE(wdg) && a_editable(GTK_EDITABLE(wdg), cmd, args)) + || (GTK_IS_TEXT_VIEW(wdg) && a_text_view(GTK_TEXT_VIEW(wdg), cmd, args)) || (GTK_IS_BUTTON(wdg) && a_button(GTK_BUTTON(wdg), cmd, args)) || (GTK_IS_WIDGET(wdg) && a_widget(GTK_WIDGET(wdg), cmd, args)) ) return 1; -- 2.47.3