X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=tools%2Fobconf%2Fmain.c;h=f4af5c533cb2eb60d510469c26ca4db5eceef4e8;hb=8419fe8a112986faeb1380329d29f53d198c6fbb;hp=9abd8716b4061bbbc7fb89daa32ab3e340df447a;hpb=a354b0f5a93b711c0eb70d52ba8fe5b42ff4ae36;p=chaz%2Fopenbox diff --git a/tools/obconf/main.c b/tools/obconf/main.c index 9abd8716..f4af5c53 100644 --- a/tools/obconf/main.c +++ b/tools/obconf/main.c @@ -1,5 +1,5 @@ -#include "obconf.h" -#include "plugins.h" +/*#include "obconf.h" + #include "plugins.h"*/ #include "parser/parse.h" #include "gettext.h" @@ -9,8 +9,22 @@ #define OB_ICON "openbox-icon" static GtkWidget *mainwin; +static GtkWidget *mainlist; +static GtkListStore *mainstore; +static GtkWidget *mainworkarea; static GdkPixbuf *ob_icon; +enum { + NAME_COLUMN, + N_COLUMNS +}; + +gboolean on_mainwindow_delete_event(GtkWidget *w, GdkEvent *e, gpointer d); +void on_quit_activate(GtkMenuItem *item, gpointer d); +void on_applybutton_clicked(GtkButton *but, gpointer d); +void on_revertbutton_clicked(GtkButton *but, gpointer d); +void on_selection_changed(GtkTreeSelection *selection, gpointer data); + static void obconf_error(GError *e) { GtkWidget *d; @@ -20,8 +34,10 @@ static void obconf_error(GError *e) GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "%s", e->message); - gtk_dialog_run(GTK_DIALOG(d)); - gtk_widget_destroy(d); + g_signal_connect_swapped(GTK_OBJECT(d), "response", + G_CALLBACK(gtk_widget_destroy), + GTK_OBJECT(d)); + gtk_widget_show(d); } static void load_stock () @@ -50,21 +66,152 @@ static void load_stock () } } +GtkWidget* build_menu(GtkAccelGroup *accel) +{ + GtkWidget *menu; + GtkWidget *submenu; + GtkWidget *item; + + menu = gtk_menu_bar_new(); + + /* File menu */ + + submenu = gtk_menu_new(); + gtk_menu_set_accel_group(GTK_MENU(submenu), accel); + + item = gtk_image_menu_item_new_from_stock(GTK_STOCK_QUIT, accel); + g_signal_connect(item, "activate", G_CALLBACK(on_quit_activate), NULL); + gtk_menu_append(GTK_MENU(submenu), item); + + item = gtk_menu_item_new_with_mnemonic("_File"); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu); + gtk_menu_bar_append(GTK_MENU_BAR(menu), item); + + /* About menu */ + + submenu = gtk_menu_new(); + gtk_menu_set_accel_group(GTK_MENU(submenu), accel); + + item = gtk_menu_item_new_with_mnemonic("_About"); + gtk_menu_append(GTK_MENU(submenu), item); + + item = gtk_menu_item_new_with_mnemonic("_Help"); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu); + gtk_menu_bar_append(GTK_MENU_BAR(menu), item); + + gtk_widget_show_all(menu); + + return menu; +} + +GtkWidget* build_list(GtkListStore **model) +{ + GtkWidget *list; + GtkListStore *store; + GtkCellRenderer *ren; + GtkTreeViewColumn *col; + GtkTreeSelection *sel; + + store = gtk_list_store_new(N_COLUMNS, + G_TYPE_STRING); + + list = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); + gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(list), FALSE); + + sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(list)); + gtk_tree_selection_set_mode(sel, GTK_SELECTION_SINGLE); + g_signal_connect(sel, "changed", G_CALLBACK(on_selection_changed), NULL); + + ren = gtk_cell_renderer_text_new(); + col = gtk_tree_view_column_new_with_attributes("Name", + ren, + "text", + NAME_COLUMN, + NULL); + gtk_tree_view_append_column(GTK_TREE_VIEW(list), col); + + *model = store; + return list; +} + int main(int argc, char **argv) { + GtkWidget *menu; + GtkWidget *vbox; + GtkWidget *hpane; + GtkAccelGroup *accel; + GtkWidget *sep; + GtkWidget *bbox; + GtkWidget *but; + GtkWidget *bar; + gtk_set_locale(); gtk_init(&argc, &argv); - load_stock(); - mainwin = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(mainwin), "Obconf"); gtk_window_set_wmclass(GTK_WINDOW(mainwin), "obconf", "Obconf"); gtk_window_set_role(GTK_WINDOW(mainwin), "main window"); - if (ob_icon) gtk_window_set_icon(GTK_WINDOW(mainwin), ob_icon); + + g_signal_connect(mainwin, "delete-event", + G_CALLBACK(on_mainwindow_delete_event), NULL); + + accel = gtk_accel_group_new(); + gtk_window_add_accel_group(GTK_WINDOW(mainwin), accel); + + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add(GTK_CONTAINER(mainwin), vbox); + + /* Menu */ + + menu = build_menu(accel); + gtk_box_pack_start(GTK_BOX(vbox), menu, FALSE, FALSE, 0); + + hpane = gtk_hpaned_new(); + gtk_box_pack_start(GTK_BOX(vbox), hpane, TRUE, TRUE, 0); + + /* List */ + + mainlist = build_list(&mainstore); + gtk_container_add(GTK_CONTAINER(hpane), mainlist); + + /* Main work area */ + + mainworkarea = gtk_layout_new(NULL, NULL); + gtk_container_add(GTK_CONTAINER(hpane), mainworkarea); + + /* Separator */ + + sep = gtk_hseparator_new(); + gtk_box_pack_start(GTK_BOX(vbox), sep, FALSE, FALSE, 0); + + /* Button box */ + + bbox = gtk_hbutton_box_new(); + gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); + gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 6); + gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0); + + /* Revert Button */ + + but = gtk_button_new_with_mnemonic("_Revert"); + gtk_box_pack_start(GTK_BOX(bbox), but, FALSE, FALSE, 0); + + /* Apply Button */ + + but = gtk_button_new_with_mnemonic("_Apply"); + gtk_box_pack_start(GTK_BOX(bbox), but, FALSE, FALSE, 0); + + /* Status bar */ + + bar = gtk_statusbar_new(); + gtk_box_pack_start(GTK_BOX(vbox), bar, FALSE, FALSE, 0); gtk_widget_show_all(mainwin); + load_stock(); + if (ob_icon) gtk_window_set_icon(GTK_WINDOW(mainwin), ob_icon); + gtk_main(); return 0; } @@ -82,21 +229,22 @@ void on_quit_activate(GtkMenuItem *item, gpointer d) void on_applybutton_clicked(GtkButton *but, gpointer d) { - g_message("apply\n"); + g_message("apply"); } void on_revertbutton_clicked(GtkButton *but, gpointer d) { - g_message("revert\n"); + g_message("revert"); } -void on_helpbutton_clicked(GtkButton *but, gpointer d) +void on_selection_changed(GtkTreeSelection *sel, gpointer data) { - g_message("help\n"); -} + GtkTreeIter iter; + GtkTreeModel *model; -void on_sectiontree_row_activated(GtkTreeView *tree, GtkTreePath *path, - GtkTreeViewColumn *col, gpointer p) -{ - g_message("activated\n"); + if (gtk_tree_selection_get_selected(sel, &model, &iter)) { + g_message("activated"); + } else { + g_message("none activated"); + } }