}
void a_listbox_add(GtkListBox *w, char *arg) {
- char *label = malloc(strlen(arg));
+ char *label = malloc(strlen(arg) + 1);
strcpy(label, arg);
- GtkWidget *glabel = gtk_label_new(label);
+ GtkWidget *glabel = gtk_button_new_with_label(label);
gtk_list_box_insert(w, glabel, -1);
gtk_widget_set_visible(glabel, TRUE);
}
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, "%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);
+ else return 0;
+ return 1;
+}
+
int action(char *cli) {
GtkWidget *wdg;
char *wid = strtok(cli, " \n"); // Separator: Space, Tab, Newline
char *cmd = strtok(NULL, " \n");
char *args = strtok(NULL, "");
- if ( !wid || !wid[0]
- || !(wdg = GTK_WIDGET(gtk_builder_get_object(builder, wid)))
- ) return 0;
+ if ( !wid || !wid[0] ) return 0;
+ else if ( wid[0] == ':' && !wid[1] ) return a_builder(cmd, args);
+ else if (!(wdg = GTK_WIDGET(gtk_builder_get_object(builder, wid)))) return 0;
else if (0
|| (GTK_IS_TOGGLE_BUTTON(wdg) && a_tb(GTK_TOGGLE_BUTTON(wdg), cmd, args))
|| (GTK_IS_CHECK_MENU_ITEM(wdg) && a_cmi(GTK_CHECK_MENU_ITEM(wdg), cmd, args))
|| (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_BUTTON(wdg) && a_button(GTK_BUTTON(wdg), cmd, args))
- || (GTK_IS_WIDGET(wdg) && a_widget(GTK_WIDGET(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_BUTTON(wdg) && a_button(GTK_BUTTON(wdg), cmd, args))
+ || (GTK_IS_WIDGET(wdg) && a_widget(GTK_WIDGET(wdg), cmd, args))
) return 1;
else return 0;
}
}
void init_widgets(gpointer wp, gpointer data) {
+ static GSList *known = NULL;
GtkWidget *wdg; const char *name;
+ if ( g_slist_find(known, wp) ) return;
+ else known = g_slist_prepend(known, wp);
+
if (GTK_IS_BUILDABLE(wp)) {
wdg = GTK_WIDGET(wp);
name = gtk_buildable_get_name(GTK_BUILDABLE(wp));
g_slist_foreach(widgets, *init_widgets, NULL);
g_slist_free(widgets);
- // g_idle_add(idle_readline, builder);
- pthread_t rl;
- pthread_create(&rl, NULL, thread_readline, NULL);
+ g_idle_add(idle_readline, builder);
+ // pthread_t rl;
+ // pthread_create(&rl, NULL, thread_readline, NULL);
gtk_main();
return 0;