X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=tools%2Fobconf%2Fmain.c;h=f4af5c533cb2eb60d510469c26ca4db5eceef4e8;hb=1ce196c4f3576eaeaf1d23be1a24a5ef98183e38;hp=645556c68e4b1cc098d3dca6be26f00b6485b2dd;hpb=5be0a82a353b67160142134de1cc51fa31d72759;p=chaz%2Fopenbox diff --git a/tools/obconf/main.c b/tools/obconf/main.c index 645556c6..f4af5c53 100644 --- a/tools/obconf/main.c +++ b/tools/obconf/main.c @@ -1,59 +1,216 @@ -#include "kernel/debug.h" -#include "obconf.h" -#include "plugins.h" +/*#include "obconf.h" + #include "plugins.h"*/ #include "parser/parse.h" +#include "gettext.h" #include -#include +#include -/*#include -Display *ob_display; -int ob_screen; -Window ob_root;*/ +#define OB_ICON "openbox-icon" -GtkWindow *obconf_win; -GtkWindow *obconf_about = NULL; +static GtkWidget *mainwin; +static GtkWidget *mainlist; +static GtkListStore *mainstore; +static GtkWidget *mainworkarea; +static GdkPixbuf *ob_icon; -GtkTreeView *obconf_sections; -GtkListStore *obconf_sections_store; -static GtkCellRenderer *obconf_sections_renderer; -static GtkTreeViewColumn *obconf_sections_column; +enum { + NAME_COLUMN, + N_COLUMNS +}; -GtkNotebook *obconf_options; +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 xmlDocPtr doc; -static xmlNodePtr root; +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); +} -int main(int argc, char **argv) +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) { - GladeXML *xml; + 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); - xml = glade_xml_new("obconf.glade", NULL, NULL); - glade_xml_signal_autoconnect(xml); + 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); - obconf_win = GTK_WINDOW(glade_xml_get_widget(xml, "mainwindow")); - gtk_window_set_role(obconf_win, "main"); - obconf_about = GTK_WINDOW(glade_xml_get_widget(xml, "aboutdialog")); - gtk_window_set_role(obconf_about, "about"); - gtk_window_set_transient_for(obconf_about, obconf_win); - obconf_sections = GTK_TREE_VIEW(glade_xml_get_widget(xml, "sectiontree")); - obconf_options = GTK_NOTEBOOK(glade_xml_get_widget(xml,"optionsnotebook")); + /* Separator */ - obconf_sections_store = gtk_list_store_new(1, G_TYPE_STRING); - gtk_tree_view_set_model(obconf_sections, - GTK_TREE_MODEL(obconf_sections_store)); - obconf_sections_renderer = gtk_cell_renderer_text_new(); - obconf_sections_column = gtk_tree_view_column_new_with_attributes - ("Section", obconf_sections_renderer, "text", 0, NULL); - gtk_tree_view_append_column (obconf_sections, obconf_sections_column); + sep = gtk_hseparator_new(); + gtk_box_pack_start(GTK_BOX(vbox), sep, FALSE, FALSE, 0); - parse_load_rc(&doc, &root); + /* Button box */ - plugins_load(); + 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); - gtk_widget_show(GTK_WIDGET(obconf_win)); + /* 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; @@ -72,21 +229,22 @@ void on_quit_activate(GtkMenuItem *item, gpointer d) void on_applybutton_clicked(GtkButton *but, gpointer d) { - ob_debug("apply\n"); + g_message("apply"); } void on_revertbutton_clicked(GtkButton *but, gpointer d) { - ob_debug("revert\n"); -} - -void on_helpbutton_clicked(GtkButton *but, gpointer d) -{ - ob_debug("help\n"); + g_message("revert"); } -void on_sectiontree_row_activated(GtkTreeView *tree, GtkTreePath *path, - GtkTreeViewColumn *col, gpointer p) +void on_selection_changed(GtkTreeSelection *sel, gpointer data) { - ob_debug("activated\n"); + GtkTreeIter iter; + GtkTreeModel *model; + + if (gtk_tree_selection_get_selected(sel, &model, &iter)) { + g_message("activated"); + } else { + g_message("none activated"); + } }