/*#include "obconf.h" #include "plugins.h"*/ #include "parser/parse.h" #include "gettext.h" #include #include #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; d = gtk_message_dialog_new(mainwin ? GTK_WINDOW(mainwin) : NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "%s", e->message); g_signal_connect_swapped(GTK_OBJECT(d), "response", G_CALLBACK(gtk_widget_destroy), GTK_OBJECT(d)); gtk_widget_show(d); } static void load_stock () { GtkIconFactory *factory; GError *e = NULL; gtk_icon_factory_add_default (factory = gtk_icon_factory_new ()); ob_icon = gdk_pixbuf_new_from_file (PIXMAPDIR G_DIR_SEPARATOR_S "openbox.png", &e); if (!ob_icon) { gchar *msg = g_strdup_printf (_("Failed to load the Openbox icon, Openbox is probably not " "installed correctly. The error given was '%s'."), e->message); g_free (e->message); e->message = msg; obconf_error (e); } else { GtkIconSet *set; set = gtk_icon_set_new_from_pixbuf (ob_icon); gtk_icon_factory_add (factory, OB_ICON, set); gtk_icon_set_unref (set); } } 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); 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"); 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; } gboolean on_mainwindow_delete_event(GtkWidget *w, GdkEvent *e, gpointer d) { gtk_main_quit(); return FALSE; } void on_quit_activate(GtkMenuItem *item, gpointer d) { gtk_main_quit(); } void on_applybutton_clicked(GtkButton *but, gpointer d) { g_message("apply"); } void on_revertbutton_clicked(GtkButton *but, gpointer d) { g_message("revert"); } void on_selection_changed(GtkTreeSelection *sel, gpointer data) { GtkTreeIter iter; GtkTreeModel *model; if (gtk_tree_selection_get_selected(sel, &model, &iter)) { g_message("activated"); } else { g_message("none activated"); } }