13 static void girara_toggle_widget_visibility(GtkWidget* widget);
18 g_return_val_if_fail(session != NULL,
false);
19 g_return_val_if_fail(buffer || key || modifier,
false);
20 g_return_val_if_fail(
function != NULL,
false);
22 girara_argument_t argument = {argument_n, (argument_data != NULL) ?
23 g_strdup(argument_data) : NULL};
26 bool found_existing_shortcut =
false;
28 if (((shortcuts_it->mask == modifier && shortcuts_it->key == key && (modifier != 0 || key != 0)) ||
29 (buffer && shortcuts_it->buffered_command && !strcmp(shortcuts_it->buffered_command, buffer)))
30 && ((shortcuts_it->mode == mode) || (mode == 0)))
32 if (shortcuts_it->argument.data != NULL) {
33 g_free(shortcuts_it->argument.data);
36 shortcuts_it->function =
function;
37 shortcuts_it->argument = argument;
38 found_existing_shortcut =
true;
47 if (found_existing_shortcut ==
true) {
52 girara_shortcut_t* shortcut = g_slice_new(girara_shortcut_t);
54 shortcut->mask = modifier;
56 shortcut->buffered_command = buffer;
57 shortcut->function =
function;
58 shortcut->mode = mode;
59 shortcut->argument = argument;
68 g_return_val_if_fail(session != NULL,
false);
69 g_return_val_if_fail(buffer || key || modifier,
false);
73 if (((shortcuts_it->mask == modifier && shortcuts_it->key == key && (modifier != 0 || key != 0)) ||
74 (buffer && shortcuts_it->buffered_command && !strcmp(shortcuts_it->buffered_command, buffer)))
75 && shortcuts_it->mode == mode)
89 g_return_if_fail(shortcut != NULL);
90 g_free(shortcut->argument.data);
91 g_slice_free(girara_shortcut_t, shortcut);
97 g_return_val_if_fail(session != NULL,
false);
98 g_return_val_if_fail(
function != NULL,
false);
100 girara_argument_t argument = {argument_n, argument_data};
103 GIRARA_LIST_FOREACH(session->bindings.inputbar_shortcuts, girara_inputbar_shortcut_t*, iter, inp_sh_it)
104 if (inp_sh_it->mask == modifier && inp_sh_it->key == key) {
105 inp_sh_it->function =
function;
106 inp_sh_it->argument = argument;
114 girara_inputbar_shortcut_t* inputbar_shortcut = g_slice_new(girara_inputbar_shortcut_t);
116 inputbar_shortcut->mask = modifier;
117 inputbar_shortcut->key = key;
118 inputbar_shortcut->function =
function;
119 inputbar_shortcut->argument = argument;
128 g_return_val_if_fail(session != NULL,
false);
131 GIRARA_LIST_FOREACH(session->bindings.inputbar_shortcuts, girara_inputbar_shortcut_t*, iter, inp_sh_it)
132 if (inp_sh_it->mask == modifier && inp_sh_it->key == key) {
145 g_slice_free(girara_inputbar_shortcut_t, inputbar_shortcut);
155 gtk_editable_delete_text(GTK_EDITABLE(session->gtk.inputbar_entry), 0, -1);
158 gtk_widget_grab_focus(GTK_WIDGET(session->gtk.view));
161 gtk_widget_hide(GTK_WIDGET(session->gtk.inputbar_dialog));
162 gtk_widget_hide(GTK_WIDGET(session->gtk.inputbar));
165 session->signals.inputbar_custom_activate = NULL;
166 session->signals.inputbar_custom_key_press_event = NULL;
167 gtk_entry_set_visibility(session->gtk.inputbar_entry, TRUE);
175 gchar *separator = NULL;
177 gchar *input = gtk_editable_get_chars(GTK_EDITABLE(session->gtk.inputbar_entry), 0, -1);
178 int length = strlen(input);
179 int pos = gtk_editable_get_position(GTK_EDITABLE(session->gtk.inputbar_entry));
182 switch (argument->n) {
191 for (; i >= 0 && input[i] ==
' '; i--);
194 while ((i == (pos - 1)) || ((i > 0) && !strchr(separator, input[i]))) {
198 gtk_editable_delete_text(GTK_EDITABLE(session->gtk.inputbar_entry), i + 1, pos);
199 gtk_editable_set_position(GTK_EDITABLE(session->gtk.inputbar_entry), i + 1);
202 if ((length - 1) <= 0) {
205 gtk_editable_delete_text(GTK_EDITABLE(session->gtk.inputbar_entry), pos - 1, pos);
208 gtk_editable_delete_text(GTK_EDITABLE(session->gtk.inputbar_entry), 1, pos);
211 gtk_editable_set_position(GTK_EDITABLE(session->gtk.inputbar_entry), pos + 1);
214 gtk_editable_set_position(GTK_EDITABLE(session->gtk.inputbar_entry), (pos == 0) ? 0 : pos - 1);
217 if((length - 1) <= 0) {
220 gtk_editable_delete_text(GTK_EDITABLE(session->gtk.inputbar_entry), pos, pos + 1);
223 gtk_editable_delete_text(GTK_EDITABLE(session->gtk.inputbar_entry), pos, length);
226 gtk_editable_set_position(GTK_EDITABLE(session->gtk.inputbar_entry), 1);
229 gtk_editable_set_position(GTK_EDITABLE(session->gtk.inputbar_entry), -1);
243 g_return_val_if_fail(session != NULL,
false);
244 g_return_val_if_fail(session->gtk.inputbar_entry != NULL,
false);
246 if (gtk_widget_get_visible(GTK_WIDGET(session->gtk.inputbar)) ==
false) {
247 gtk_widget_show(GTK_WIDGET(session->gtk.inputbar));
250 if (gtk_widget_get_visible(GTK_WIDGET(session->gtk.notification_area)) ==
true) {
251 gtk_widget_hide(GTK_WIDGET(session->gtk.notification_area));
254 gtk_widget_grab_focus(GTK_WIDGET(session->gtk.inputbar_entry));
256 if (argument != NULL && argument->data != NULL) {
257 gtk_entry_set_text(session->gtk.inputbar_entry, (
char*) argument->data);
260 gchar* x_clipboard_text = gtk_clipboard_wait_for_text(gtk_clipboard_get(GDK_SELECTION_PRIMARY));
262 gtk_editable_set_position(GTK_EDITABLE(session->gtk.inputbar_entry), -1);
264 if (x_clipboard_text != NULL) {
266 gtk_clipboard_set_text(gtk_clipboard_get(GDK_SELECTION_PRIMARY), x_clipboard_text, -1);
267 g_free(x_clipboard_text);
277 g_return_val_if_fail(session != NULL,
false);
280 gtk_widget_hide(GTK_WIDGET(session->gtk.notification_area));
288 g_return_val_if_fail(session != NULL,
false);
301 g_return_val_if_fail(session != NULL,
false);
315 g_return_val_if_fail(session != NULL,
false);
320 unsigned int new_tab = (current_tab + step) % number_of_tabs;
322 if (t != 0 && t <= number_of_tabs) {
338 girara_toggle_widget_visibility(GtkWidget* widget)
340 if (widget == NULL) {
344 if (gtk_widget_get_visible(widget)) {
345 gtk_widget_hide(widget);
347 gtk_widget_show(widget);
354 g_return_val_if_fail(session != NULL,
false);
356 girara_toggle_widget_visibility(GTK_WIDGET(session->gtk.inputbar));
364 g_return_val_if_fail(session != NULL,
false);
366 girara_toggle_widget_visibility(GTK_WIDGET(session->gtk.statusbar));
374 g_return_val_if_fail(session != NULL,
false);
376 girara_toggle_widget_visibility(GTK_WIDGET(session->gtk.tabbar));
384 g_return_val_if_fail(session != NULL,
false);
386 if (argument == NULL || argument->data == NULL) {
392 if (argument_list == NULL) {
400 if (g_shell_parse_argv((
const gchar*) argument->data, &argc, &argv, NULL) != FALSE) {
401 for(
int i = 0; i < argc; i++) {
402 char* argument = g_strdup(argv[i]);
421 g_return_val_if_fail(session != NULL,
false);
423 if (
function == NULL || identifier == NULL) {
427 GIRARA_LIST_FOREACH(session->config.shortcut_mappings, girara_shortcut_mapping_t*, iter, data)
428 if (strcmp(data->identifier, identifier) == 0) {
429 data->function =
function;
436 girara_shortcut_mapping_t* mapping = g_slice_new(girara_shortcut_mapping_t);
438 mapping->identifier = g_strdup(identifier);
439 mapping->function =
function;
448 if (mapping == NULL) {
452 g_free(mapping->identifier);
453 g_slice_free(girara_shortcut_mapping_t, mapping);
458 g_return_val_if_fail(session != NULL,
false);
460 if (identifier == NULL) {
464 GIRARA_LIST_FOREACH(session->config.argument_mappings, girara_argument_mapping_t*, iter, mapping);
465 if (g_strcmp0(mapping->identifier, identifier) == 0) {
466 mapping->value = value;
473 girara_argument_mapping_t* mapping = g_slice_new(girara_argument_mapping_t);
475 mapping->identifier = g_strdup(identifier);
476 mapping->value = value;
485 if (argument_mapping == NULL) {
489 g_free(argument_mapping->identifier);
490 g_slice_free(girara_argument_mapping_t, argument_mapping);
496 event_type,
int argument_n,
void* argument_data)
498 g_return_val_if_fail(session != NULL,
false);
499 g_return_val_if_fail(
function != NULL,
false);
501 girara_argument_t argument = {argument_n, argument_data};
505 if (me_it->mask == mask && me_it->button == button &&
506 me_it->mode == mode && me_it->event_type == event_type)
508 me_it->function =
function;
509 me_it->argument = argument;
516 girara_mouse_event_t* mouse_event = g_slice_new(girara_mouse_event_t);
518 mouse_event->mask = mask;
519 mouse_event->button = button;
520 mouse_event->function =
function;
521 mouse_event->mode = mode;
522 mouse_event->event_type = event_type;
523 mouse_event->argument = argument;
532 g_return_val_if_fail(session != NULL,
false);
536 if (me_it->mask == mask && me_it->button == button &&
551 if (mouse_event == NULL) {
554 g_slice_free(girara_mouse_event_t, mouse_event);