3 #include "parser/parse.h"
7 #include <gdk-pixbuf/gdk-pixbuf.h>
9 #define OB_ICON "openbox-icon"
11 static GtkWidget
*mainwin
;
12 static GtkWidget
*mainlist
;
13 static GtkListStore
*mainstore
;
14 static GtkWidget
*mainworkarea
;
15 static GdkPixbuf
*ob_icon
;
22 gboolean
on_mainwindow_delete_event(GtkWidget
*w
, GdkEvent
*e
, gpointer d
);
23 void on_quit_activate(GtkMenuItem
*item
, gpointer d
);
24 void on_applybutton_clicked(GtkButton
*but
, gpointer d
);
25 void on_revertbutton_clicked(GtkButton
*but
, gpointer d
);
26 void on_selection_changed(GtkTreeSelection
*selection
, gpointer data
);
28 static void obconf_error(GError
*e
)
32 d
= gtk_message_dialog_new(mainwin
? GTK_WINDOW(mainwin
) : NULL
,
33 GTK_DIALOG_DESTROY_WITH_PARENT
,
37 g_signal_connect_swapped(GTK_OBJECT(d
), "response",
38 G_CALLBACK(gtk_widget_destroy
),
43 static void load_stock ()
45 GtkIconFactory
*factory
;
48 gtk_icon_factory_add_default (factory
= gtk_icon_factory_new ());
50 ob_icon
= gdk_pixbuf_new_from_file (PIXMAPDIR G_DIR_SEPARATOR_S
53 gchar
*msg
= g_strdup_printf
54 (_("Failed to load the Openbox icon, Openbox is probably not "
55 "installed correctly. The error given was '%s'."),
63 set
= gtk_icon_set_new_from_pixbuf (ob_icon
);
64 gtk_icon_factory_add (factory
, OB_ICON
, set
);
65 gtk_icon_set_unref (set
);
69 GtkWidget
* build_menu(GtkAccelGroup
*accel
)
75 menu
= gtk_menu_bar_new();
79 submenu
= gtk_menu_new();
80 gtk_menu_set_accel_group(GTK_MENU(submenu
), accel
);
82 item
= gtk_image_menu_item_new_from_stock(GTK_STOCK_QUIT
, accel
);
83 g_signal_connect(item
, "activate", G_CALLBACK(on_quit_activate
), NULL
);
84 gtk_menu_append(GTK_MENU(submenu
), item
);
86 item
= gtk_menu_item_new_with_mnemonic("_File");
87 gtk_menu_item_set_submenu(GTK_MENU_ITEM(item
), submenu
);
88 gtk_menu_bar_append(GTK_MENU_BAR(menu
), item
);
92 submenu
= gtk_menu_new();
93 gtk_menu_set_accel_group(GTK_MENU(submenu
), accel
);
95 item
= gtk_menu_item_new_with_mnemonic("_About");
96 gtk_menu_append(GTK_MENU(submenu
), item
);
98 item
= gtk_menu_item_new_with_mnemonic("_Help");
99 gtk_menu_item_set_submenu(GTK_MENU_ITEM(item
), submenu
);
100 gtk_menu_bar_append(GTK_MENU_BAR(menu
), item
);
102 gtk_widget_show_all(menu
);
107 GtkWidget
* build_list(GtkListStore
**model
)
111 GtkCellRenderer
*ren
;
112 GtkTreeViewColumn
*col
;
113 GtkTreeSelection
*sel
;
115 store
= gtk_list_store_new(N_COLUMNS
,
118 list
= gtk_tree_view_new_with_model(GTK_TREE_MODEL(store
));
119 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(list
), FALSE
);
121 sel
= gtk_tree_view_get_selection(GTK_TREE_VIEW(list
));
122 gtk_tree_selection_set_mode(sel
, GTK_SELECTION_SINGLE
);
123 g_signal_connect(sel
, "changed", G_CALLBACK(on_selection_changed
), NULL
);
125 ren
= gtk_cell_renderer_text_new();
126 col
= gtk_tree_view_column_new_with_attributes("Name",
131 gtk_tree_view_append_column(GTK_TREE_VIEW(list
), col
);
137 int main(int argc
, char **argv
)
142 GtkAccelGroup
*accel
;
149 gtk_init(&argc
, &argv
);
151 mainwin
= gtk_window_new(GTK_WINDOW_TOPLEVEL
);
152 gtk_window_set_title(GTK_WINDOW(mainwin
), "Obconf");
153 gtk_window_set_wmclass(GTK_WINDOW(mainwin
), "obconf", "Obconf");
154 gtk_window_set_role(GTK_WINDOW(mainwin
), "main window");
156 g_signal_connect(mainwin
, "delete-event",
157 G_CALLBACK(on_mainwindow_delete_event
), NULL
);
159 accel
= gtk_accel_group_new();
160 gtk_window_add_accel_group(GTK_WINDOW(mainwin
), accel
);
162 vbox
= gtk_vbox_new(FALSE
, 5);
163 gtk_container_add(GTK_CONTAINER(mainwin
), vbox
);
167 menu
= build_menu(accel
);
168 gtk_box_pack_start(GTK_BOX(vbox
), menu
, FALSE
, FALSE
, 0);
170 hpane
= gtk_hpaned_new();
171 gtk_box_pack_start(GTK_BOX(vbox
), hpane
, TRUE
, TRUE
, 0);
175 mainlist
= build_list(&mainstore
);
176 gtk_container_add(GTK_CONTAINER(hpane
), mainlist
);
180 mainworkarea
= gtk_layout_new(NULL
, NULL
);
181 gtk_container_add(GTK_CONTAINER(hpane
), mainworkarea
);
185 sep
= gtk_hseparator_new();
186 gtk_box_pack_start(GTK_BOX(vbox
), sep
, FALSE
, FALSE
, 0);
190 bbox
= gtk_hbutton_box_new();
191 gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox
), GTK_BUTTONBOX_END
);
192 gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox
), 6);
193 gtk_box_pack_start(GTK_BOX(vbox
), bbox
, FALSE
, FALSE
, 0);
197 but
= gtk_button_new_with_mnemonic("_Revert");
198 gtk_box_pack_start(GTK_BOX(bbox
), but
, FALSE
, FALSE
, 0);
202 but
= gtk_button_new_with_mnemonic("_Apply");
203 gtk_box_pack_start(GTK_BOX(bbox
), but
, FALSE
, FALSE
, 0);
207 bar
= gtk_statusbar_new();
208 gtk_box_pack_start(GTK_BOX(vbox
), bar
, FALSE
, FALSE
, 0);
210 gtk_widget_show_all(mainwin
);
213 if (ob_icon
) gtk_window_set_icon(GTK_WINDOW(mainwin
), ob_icon
);
219 gboolean
on_mainwindow_delete_event(GtkWidget
*w
, GdkEvent
*e
, gpointer d
)
225 void on_quit_activate(GtkMenuItem
*item
, gpointer d
)
230 void on_applybutton_clicked(GtkButton
*but
, gpointer d
)
235 void on_revertbutton_clicked(GtkButton
*but
, gpointer d
)
240 void on_selection_changed(GtkTreeSelection
*sel
, gpointer data
)
245 if (gtk_tree_selection_get_selected(sel
, &model
, &iter
)) {
246 g_message("activated");
248 g_message("none activated");