1 /* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*-
3 main.c for ObConf, the configuration tool for Openbox
4 Copyright (c) 2003-2007 Dana Jansens
5 Copyright (c) 2003 Tim Riley
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 See the COPYING file for a copy of the GNU General Public License.
26 #define SN_API_NOT_YET_FROZEN
28 #undef SN_API_NOT_YET_FROZEN
31 GtkWidget *mainwin = NULL;
38 static gchar *obc_theme_install = NULL;
39 static gchar *obc_theme_archive = NULL;
41 void obconf_error(gchar *msg)
45 d = gtk_message_dialog_new(mainwin ? GTK_WINDOW(mainwin) : NULL,
46 GTK_DIALOG_DESTROY_WITH_PARENT,
50 g_signal_connect_swapped(GTK_OBJECT(d), "response",
51 G_CALLBACK(gtk_widget_destroy),
56 static void print_version()
58 g_print("ObConf %s\n", PACKAGE_VERSION);
59 g_print(_("Copyright (c)"));
60 g_print(" 2003-2007 Dana Jansens\n");
61 g_print(_("Copyright (c)"));
62 g_print(" 2003 Tim Riley\n\n");
63 g_print("This program comes with ABSOLUTELY NO WARRANTY.\n");
64 g_print("This is free software, and you are welcome to redistribute it\n");
65 g_print("under certain conditions. See the file COPYING for details.\n\n");
70 static void print_help()
72 g_print(_("Syntax: obconf [options] [ARCHIVE.obt]\n"));
73 g_print(_("\nOptions:\n"));
74 g_print(_(" --help Display this help and exit\n"));
75 g_print(_(" --version Display the version and exit\n"));
76 g_print(_(" --install ARCHIVE.obt Install the given theme archive and select it\n"));
77 g_print(_(" --archive THEME Create a theme archive from the given theme directory\n"));
78 g_print(_("\nPlease report bugs at %s\n\n"), PACKAGE_BUGREPORT);
83 static void parse_args(int argc, char **argv)
87 for (i = 1; i < argc; ++i) {
88 if (!strcmp(argv[i], "--help"))
90 if (!strcmp(argv[i], "--version"))
92 else if (!strcmp(argv[i], "--install")) {
93 if (i == argc - 1) /* no args left */
94 g_printerr(_("--install requires an argument\n"));
96 obc_theme_install = argv[++i];
98 else if (!strcmp(argv[i], "--archive")) {
99 if (i == argc - 1) /* no args left */
100 g_printerr(_("--archive requires an argument\n"));
102 obc_theme_archive = argv[++i];
104 obc_theme_install = argv[i];
108 int main(int argc, char **argv)
111 SnLauncheeContext *sn_cx;
114 gtk_init(&argc, &argv);
115 parse_args(argc, argv);
117 if (obc_theme_archive) {
118 theme_archive(obc_theme_archive);
122 p = g_build_filename(GLADEDIR, "obconf.glade", NULL);
123 glade = glade_xml_new(p, NULL, NULL);
127 obconf_error("Failed to load the obconf.glade interface file. You "
128 "have probably failed to install ObConf properly.");
132 parse_paths_startup();
133 rrinst = RrInstanceNew(GDK_DISPLAY(), gdk_x11_get_default_screen());
135 xmlIndentTreeOutput = 1;
136 if (!parse_load_rc(NULL, &doc, &root)) {
137 obconf_error("Failed to load an rc.xml. You have probably failed to "
138 "install Openbox properly.");
142 glade_xml_signal_autoconnect(glade);
145 gchar *s = g_strdup_printf
146 ("<span weight=\"bold\" size=\"xx-large\">ObConf %s</span>",
148 gtk_label_set_markup(GTK_LABEL
149 (glade_xml_get_widget(glade, "title_label")), s);
153 setup_behavior_tab();
155 setup_focus_mouse(glade_xml_get_widget(glade, "focus_mouse"));
156 setup_focus_raise(glade_xml_get_widget(glade, "focus_raise"));
157 setup_focus_last(glade_xml_get_widget(glade, "focus_raise"));
158 setup_focus_delay(glade_xml_get_widget(glade, "focus_delay"));
159 setup_focus_new(glade_xml_get_widget(glade, "focus_new"));
160 setup_place_mouse(glade_xml_get_widget(glade, "place_mouse"));
161 setup_resist_window(glade_xml_get_widget(glade, "resist_window"));
162 setup_resist_edge(glade_xml_get_widget(glade, "resist_edge"));
163 setup_resize_contents(glade_xml_get_widget(glade, "resize_contents"));
164 setup_dock_position(glade_xml_get_widget(glade, "dock_position"));
165 setup_dock_float_x(glade_xml_get_widget(glade, "dock_float_x"));
166 setup_dock_float_y(glade_xml_get_widget(glade, "dock_float_y"));
167 setup_dock_stacking(glade_xml_get_widget(glade, "dock_stack_top"),
168 glade_xml_get_widget(glade, "dock_stack_normal"),
169 glade_xml_get_widget(glade, "dock_stack_bottom"));
170 setup_dock_direction(glade_xml_get_widget(glade, "dock_direction"));
171 setup_dock_hide(glade_xml_get_widget(glade, "dock_hide"));
172 setup_dock_hide_delay(glade_xml_get_widget(glade, "dock_hide_delay"));
173 setup_theme_names(glade_xml_get_widget(glade, "theme_names"));
174 setup_title_layout(glade_xml_get_widget(glade, "title_layout"));
175 setup_desktop_num(glade_xml_get_widget(glade, "desktop_num"));
176 setup_desktop_names(glade_xml_get_widget(glade, "desktop_names"));
177 setup_window_border(glade_xml_get_widget(glade, "window_border"));
178 setup_font_active(glade_xml_get_widget(glade, "font_active"));
179 setup_font_inactive(glade_xml_get_widget(glade, "font_inactive"));
180 setup_font_menu_header(glade_xml_get_widget(glade, "font_menu_header"));
181 setup_font_menu_item(glade_xml_get_widget(glade, "font_menu_item"));
182 setup_font_display(glade_xml_get_widget(glade, "font_display"));
184 mainwin = glade_xml_get_widget(glade, "main_window");
186 sn_d = sn_display_new(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()),
189 sn_cx = sn_launchee_context_new_from_environment
190 (sn_d, gdk_screen_get_number(gdk_display_get_default_screen
191 (gdk_display_get_default())));
194 sn_launchee_context_setup_window
195 (sn_cx, GDK_WINDOW_XWINDOW(GDK_WINDOW(mainwin->window)));
197 gtk_widget_show_all(mainwin);
200 sn_launchee_context_complete(sn_cx);
203 sn_launchee_context_unref(sn_cx);
204 sn_display_unref(sn_d);
206 if (obc_theme_install)
207 handlers_install_theme(obc_theme_install);
211 RrInstanceFree(rrinst);
212 parse_paths_shutdown();