5 #include <glib/gi18n-lib.h>
16 #define COMMENT_PREFIX "\"#"
19 cb_window_icon(girara_session_t* session,
const char*
UNUSED(name),
22 g_return_if_fail(session != NULL && value != NULL);
24 if (session->gtk.window != NULL) {
28 gtk_window_set_icon_from_file(GTK_WINDOW(session->gtk.window), path, &error);
30 girara_error(
"failed to load window icon: %s", error->message);
39 cb_font(girara_session_t* session,
const char*
UNUSED(name),
42 g_return_if_fail(session != NULL && value != NULL);
44 pango_font_description_free(session->style.font);
47 PangoFontDescription* font = pango_font_description_from_string(value);
48 session->style.font = font;
51 if (session->gtk.inputbar_entry != NULL) {
52 gtk_widget_override_font(GTK_WIDGET(session->gtk.inputbar_entry), font);
55 if (session->gtk.inputbar_dialog != NULL) {
56 gtk_widget_override_font(GTK_WIDGET(session->gtk.inputbar_dialog), font);
60 if (session->gtk.notification_text != NULL) {
61 gtk_widget_override_font(GTK_WIDGET(session->gtk.notification_text), font);
64 GIRARA_LIST_FOREACH(session->elements.statusbar_items, girara_statusbar_item_t *, iter, item)
66 gtk_widget_override_font(GTK_WIDGET(item->text), font);
72 cb_guioptions(girara_session_t* session,
const char*
UNUSED(name),
75 g_return_if_fail(session != NULL && value != NULL);
78 bool show_commandline =
false;
79 bool show_statusbar =
false;
82 char* input = (
char*) value;
83 int input_length = strlen(input);
85 for (
int i = 0; i < input_length; i++) {
89 show_commandline =
true;
93 show_statusbar =
true;
99 if (show_commandline ==
true) {
100 session->global.autohide_inputbar =
false;
101 gtk_widget_show(session->gtk.inputbar);
103 session->global.autohide_inputbar =
true;
104 gtk_widget_hide(session->gtk.inputbar);
107 if (show_statusbar ==
true) {
108 session->global.hide_statusbar =
false;
109 gtk_widget_show(session->gtk.statusbar);
111 session->global.hide_statusbar =
true;
112 gtk_widget_hide(session->gtk.statusbar);
117 cb_scrollbars(girara_session_t* session,
const char* name,
120 g_return_if_fail(session != NULL && value != NULL);
122 bool val = *(
bool*) value;
123 bool show_hscrollbar =
false;
124 bool show_vscrollbar =
false;
126 #if (GTK_MAJOR_VERSION == 3)
127 GtkWidget *vscrollbar = gtk_scrolled_window_get_vscrollbar(GTK_SCROLLED_WINDOW(session->gtk.view));
128 GtkWidget *hscrollbar = gtk_scrolled_window_get_hscrollbar(GTK_SCROLLED_WINDOW(session->gtk.view));
130 if (vscrollbar != NULL) {
131 show_vscrollbar = gtk_widget_get_visible(vscrollbar);
134 if (hscrollbar != NULL) {
135 show_hscrollbar = gtk_widget_get_visible(hscrollbar);
138 GtkPolicyType h_policy, v_policy;
139 gtk_scrolled_window_get_policy(GTK_SCROLLED_WINDOW(session->gtk.view), &h_policy, &v_policy);
140 show_vscrollbar = (v_policy == GTK_POLICY_AUTOMATIC);
141 show_hscrollbar = (h_policy == GTK_POLICY_AUTOMATIC);
144 if (!strcmp(name,
"show-scrollbars")) {
145 show_hscrollbar = show_vscrollbar = val;
150 }
else if (!strcmp(name,
"show-h-scrollbar")) {
151 show_hscrollbar = val;
153 }
else if (!strcmp(name,
"show-v-scrollbar")) {
154 show_vscrollbar = val;
157 #if (GTK_MAJOR_VERSION == 3)
158 if (vscrollbar != NULL) {
159 gtk_widget_set_visible(vscrollbar, show_vscrollbar);
162 if (hscrollbar != NULL) {
163 gtk_widget_set_visible(hscrollbar, show_hscrollbar);
166 h_policy = show_hscrollbar ? GTK_POLICY_AUTOMATIC : GTK_POLICY_NEVER;
167 v_policy = show_vscrollbar ? GTK_POLICY_AUTOMATIC : GTK_POLICY_NEVER;
168 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(session->gtk.view), h_policy, v_policy);
174 if (show_hscrollbar && show_vscrollbar && !val) {
177 }
else if (!show_hscrollbar && !show_vscrollbar && val) {
186 if (session == NULL) {
191 int statusbar_h_padding = 8;
192 int statusbar_v_padding = 2;
193 int window_width = 800;
194 int window_height = 600;
195 int n_completion_items = 15;
196 bool show_scrollbars =
false;
200 session->global.autohide_inputbar =
true;
210 girara_setting_add(session,
"completion-fg",
"#DDDDDD",
STRING, TRUE, _(
"Completion foreground color"), NULL, NULL);
211 girara_setting_add(session,
"completion-bg",
"#232323",
STRING, TRUE, _(
"Completion background color"), NULL, NULL);
212 girara_setting_add(session,
"completion-group-fg",
"#DEDEDE",
STRING, TRUE, _(
"Completion group foreground color"), NULL, NULL);
213 girara_setting_add(session,
"completion-group-bg",
"#000000",
STRING, TRUE, _(
"Completion group background color"), NULL, NULL);
214 girara_setting_add(session,
"completion-highlight-fg",
"#232323",
STRING, TRUE, _(
"Completion highlight foreground color"), NULL, NULL);
215 girara_setting_add(session,
"completion-highlight-bg",
"#9FBC00",
STRING, TRUE, _(
"Completion highlight background color"), NULL, NULL);
216 girara_setting_add(session,
"notification-error-fg",
"#FFFFFF",
STRING, TRUE, _(
"Error notification foreground color"), NULL, NULL);
217 girara_setting_add(session,
"notification-error-bg",
"#FF1212",
STRING, TRUE, _(
"Error notification background color"), NULL, NULL);
218 girara_setting_add(session,
"notification-warning-fg",
"#000000",
STRING, TRUE, _(
"Warning notification foreground color"), NULL, NULL);
219 girara_setting_add(session,
"notification-warning-bg",
"#F3F000",
STRING, TRUE, _(
"Warning notifaction background color"), NULL, NULL);
220 girara_setting_add(session,
"notification-fg",
"#000000",
STRING, TRUE, _(
"Notification foreground color"), NULL, NULL);
221 girara_setting_add(session,
"notification-bg",
"#FFFFFF",
STRING, TRUE, _(
"Notification background color"), NULL, NULL);
224 girara_setting_add(session,
"tabbar-focus-fg",
"#9FBC00",
STRING, TRUE, _(
"Tab bar foreground color (active)"), NULL, NULL);
225 girara_setting_add(session,
"tabbar-focus-bg",
"#000000",
STRING, TRUE, _(
"Tab bar background color (active)"), NULL, NULL);
227 girara_setting_add(session,
"window-width", &window_width,
INT, TRUE, _(
"Initial window width"), NULL, NULL);
228 girara_setting_add(session,
"window-height", &window_height,
INT, TRUE, _(
"Initial window height"), NULL, NULL);
229 girara_setting_add(session,
"statusbar-h-padding", &statusbar_h_padding,
INT, TRUE, _(
"Horizontal padding for the status input and notification bars"), NULL, NULL);
230 girara_setting_add(session,
"statusbar-v-padding", &statusbar_v_padding,
INT, TRUE, _(
"Vertical padding for the status input and notification bars"), NULL, NULL);
231 girara_setting_add(session,
"n-completion-items", &n_completion_items,
INT, TRUE, _(
"Number of completion items"), NULL, NULL);
232 girara_setting_add(session,
"show-scrollbars", &show_scrollbars,
BOOLEAN, FALSE, _(
"Show both the horizontal and vertical scrollbars"), cb_scrollbars, NULL);
233 girara_setting_add(session,
"show-h-scrollbar", &show_scrollbars,
BOOLEAN, FALSE, _(
"Show the horizontal scrollbar"), cb_scrollbars, NULL);
234 girara_setting_add(session,
"show-v-scrollbar", &show_scrollbars,
BOOLEAN, FALSE, _(
"Show the vertical scrollbar"), cb_scrollbars, NULL);
237 girara_setting_add(session,
"guioptions",
"s",
STRING, FALSE, _(
"Show or hide certain GUI elements"), cb_guioptions, NULL);
296 g_return_val_if_fail(session != NULL,
false);
297 g_return_val_if_fail(identifier != NULL,
false);
301 if (strcmp(data->identifier, identifier) == 0) {
302 data->handle = handle;
309 girara_config_handle_t* config_handle = g_slice_new(girara_config_handle_t);
311 config_handle->identifier = g_strdup(identifier);
312 config_handle->handle = handle;
321 if (handle == NULL) {
325 g_free(handle->identifier);
326 g_slice_free(girara_config_handle_t, handle);
330 config_parse(girara_session_t* session,
const char* path)
341 unsigned int line_number = 1;
344 if (strlen(line) == 0 || strchr(
COMMENT_PREFIX, line[0]) != NULL) {
353 if (argument_list == NULL) {
360 if (g_shell_parse_argv(line, &argc, &argv, NULL) != FALSE) {
361 for(
int i = 1; i < argc; i++) {
362 char* argument = g_strdup(argv[i]);
373 if (strcmp(argv[0],
"include") == 0) {
375 girara_warning(
"Could not process line %d in '%s': usage: include path.", line_number, path);
377 char* newpath = NULL;
378 if (g_path_is_absolute(argv[1]) == TRUE) {
379 newpath = g_strdup(argv[1]);
381 char* basename = g_path_get_dirname(path);
382 char* tmp = g_build_filename(basename, argv[1], NULL);
388 if (strcmp(newpath, path) == 0) {
389 girara_warning(
"Could not process line %d in '%s': trying to include itself.", line_number, path);
392 if (config_parse(session, newpath) == FALSE) {
393 girara_warning(
"Could not process line %d in '%s': failed to load '%s'.", line_number, path, newpath);
400 girara_config_handle_t* handle = NULL;
403 if (strcmp(handle->identifier, argv[0]) == 0) {
404 handle->handle(session, argument_list);
411 if (handle == NULL) {
412 girara_warning(
"Could not process line %d in '%s': Unknown handle '%s'", line_number, path, argv[0]);
429 config_parse(session, path);