mirror of
https://git.pwmt.org/pwmt/zathura.git
synced 2024-12-28 06:16:00 +01:00
Implement sc_focus_inputbar with possible APPEND_FILEPATH parameter
This commit is contained in:
parent
f4d6c6993b
commit
d8bc9fefac
3 changed files with 76 additions and 6 deletions
12
config.c
12
config.c
|
@ -106,12 +106,12 @@ config_load_default(zathura_t* zathura)
|
|||
girara_shortcut_add(gsession, 0, GDK_KEY_m, NULL, sc_change_mode, NORMAL, ADD_MARKER, NULL);
|
||||
girara_shortcut_add(gsession, 0, GDK_KEY_apostrophe, NULL, sc_change_mode, NORMAL, EVAL_MARKER, NULL);
|
||||
|
||||
girara_shortcut_add(gsession, 0, GDK_KEY_slash, NULL, girara_sc_focus_inputbar, NORMAL, 0, &("/"));
|
||||
girara_shortcut_add(gsession, GDK_SHIFT_MASK, GDK_KEY_slash, NULL, girara_sc_focus_inputbar, NORMAL, 0, &("/"));
|
||||
girara_shortcut_add(gsession, 0, GDK_KEY_question, NULL, girara_sc_focus_inputbar, NORMAL, 0, &("?"));
|
||||
girara_shortcut_add(gsession, 0, GDK_KEY_colon, NULL, girara_sc_focus_inputbar, NORMAL, 0, &(":"));
|
||||
girara_shortcut_add(gsession, 0, GDK_KEY_o, NULL, girara_sc_focus_inputbar, NORMAL, 0, &(":open "));
|
||||
girara_shortcut_add(gsession, 0, GDK_KEY_O, NULL, girara_sc_focus_inputbar, NORMAL, APPEND_FILEPATH, &(":open "));
|
||||
girara_shortcut_add(gsession, 0, GDK_KEY_slash, NULL, sc_focus_inputbar, NORMAL, 0, &("/"));
|
||||
girara_shortcut_add(gsession, GDK_SHIFT_MASK, GDK_KEY_slash, NULL, sc_focus_inputbar, NORMAL, 0, &("/"));
|
||||
girara_shortcut_add(gsession, 0, GDK_KEY_question, NULL, sc_focus_inputbar, NORMAL, 0, &("?"));
|
||||
girara_shortcut_add(gsession, 0, GDK_KEY_colon, NULL, sc_focus_inputbar, NORMAL, 0, &(":"));
|
||||
girara_shortcut_add(gsession, 0, GDK_KEY_o, NULL, sc_focus_inputbar, NORMAL, 0, &(":open "));
|
||||
girara_shortcut_add(gsession, 0, GDK_KEY_O, NULL, sc_focus_inputbar, NORMAL, APPEND_FILEPATH, &(":open "));
|
||||
|
||||
girara_shortcut_add(gsession, 0, GDK_KEY_f, NULL, sc_follow, NORMAL, 0, NULL);
|
||||
|
||||
|
|
58
shortcuts.c
58
shortcuts.c
|
@ -6,6 +6,7 @@
|
|||
#include <girara/shortcuts.h>
|
||||
#include <girara/utils.h>
|
||||
#include <gtk/gtk.h>
|
||||
#include <libgen.h>
|
||||
|
||||
#include "callbacks.h"
|
||||
#include "shortcuts.h"
|
||||
|
@ -116,6 +117,63 @@ sc_change_mode(girara_session_t* session, girara_argument_t* argument,
|
|||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
sc_focus_inputbar(girara_session_t* session, girara_argument_t* argument, girara_event_t* UNUSED(event), unsigned int UNUSED(t))
|
||||
{
|
||||
g_return_val_if_fail(session != NULL, false);
|
||||
g_return_val_if_fail(session->gtk.inputbar_entry != NULL, false);
|
||||
g_return_val_if_fail(session->global.data != NULL, false);
|
||||
zathura_t* zathura = session->global.data;
|
||||
g_return_val_if_fail(argument != NULL, false);
|
||||
|
||||
if (gtk_widget_get_visible(GTK_WIDGET(session->gtk.inputbar)) == false) {
|
||||
gtk_widget_show(GTK_WIDGET(session->gtk.inputbar));
|
||||
}
|
||||
|
||||
if (gtk_widget_get_visible(GTK_WIDGET(session->gtk.notification_area)) == true) {
|
||||
gtk_widget_hide(GTK_WIDGET(session->gtk.notification_area));
|
||||
}
|
||||
|
||||
gtk_widget_grab_focus(GTK_WIDGET(session->gtk.inputbar_entry));
|
||||
|
||||
if (argument->data != NULL) {
|
||||
gtk_entry_set_text(session->gtk.inputbar_entry, (char*) argument->data);
|
||||
|
||||
/* append filepath */
|
||||
if (argument->n == APPEND_FILEPATH && zathura->document != NULL) {
|
||||
char* file_path = g_strdup(zathura->document->file_path);
|
||||
if (file_path == NULL) {
|
||||
return false;
|
||||
}
|
||||
|
||||
char* path = dirname(file_path);
|
||||
char* tmp = g_strdup_printf("%s%s/", (char*) argument->data, (g_strcmp0(path, "/") == 0) ? "" : path);
|
||||
|
||||
if (tmp == NULL) {
|
||||
g_free(file_path);
|
||||
return false;
|
||||
}
|
||||
|
||||
gtk_entry_set_text(session->gtk.inputbar_entry, tmp);
|
||||
g_free(tmp);
|
||||
g_free(file_path);
|
||||
}
|
||||
|
||||
/* we save the X clipboard that will be clear by "grab_focus" */
|
||||
gchar* x_clipboard_text = gtk_clipboard_wait_for_text(gtk_clipboard_get(GDK_SELECTION_PRIMARY));
|
||||
|
||||
gtk_editable_set_position(GTK_EDITABLE(session->gtk.inputbar_entry), -1);
|
||||
|
||||
if (x_clipboard_text != NULL) {
|
||||
/* we reset the X clipboard with saved text */
|
||||
gtk_clipboard_set_text(gtk_clipboard_get(GDK_SELECTION_PRIMARY), x_clipboard_text, -1);
|
||||
g_free(x_clipboard_text);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
sc_follow(girara_session_t* session, girara_argument_t* UNUSED(argument),
|
||||
girara_event_t* UNUSED(event), unsigned int UNUSED(t))
|
||||
|
|
12
shortcuts.h
12
shortcuts.h
|
@ -38,6 +38,18 @@ bool sc_adjust_window(girara_session_t* session, girara_argument_t* argument, gi
|
|||
*/
|
||||
bool sc_change_mode(girara_session_t* session, girara_argument_t* argument, girara_event_t* event, unsigned int t);
|
||||
|
||||
/**
|
||||
* Shortcut function to focus the inputbar
|
||||
*
|
||||
* @param session The used girara session
|
||||
* @param argument The argument
|
||||
* @param event Girara event
|
||||
* @param t Number of executions
|
||||
* @return true No error occured
|
||||
* @return false An error occured (abort execution)
|
||||
*/
|
||||
bool sc_focus_inputbar(girara_session_t* session, girara_argument_t* argument, girara_event_t* event, unsigned int t);
|
||||
|
||||
/**
|
||||
* Follow a link
|
||||
*
|
||||
|
|
Loading…
Reference in a new issue