rename "keys" to shortcuts, put bar functions together
This commit is contained in:
parent
5e42ab4b00
commit
f6a65b066e
2
config.h
2
config.h
|
@ -84,7 +84,7 @@ static struct {
|
||||||
unsigned mod;
|
unsigned mod;
|
||||||
unsigned key;
|
unsigned key;
|
||||||
func id;
|
func id;
|
||||||
} keys[] = {
|
} shortcut[] = {
|
||||||
{ CTRL, KEY(h), goback },
|
{ CTRL, KEY(h), goback },
|
||||||
{ CTRL, KEY(j), goforward },
|
{ CTRL, KEY(j), goforward },
|
||||||
{ CTRL, KEY(r), refresh },
|
{ CTRL, KEY(r), refresh },
|
||||||
|
|
80
rose.c
80
rose.c
|
@ -230,6 +230,8 @@ void notebook_append(GtkNotebook* notebook, const char* uri)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Top bar */
|
||||||
|
|
||||||
void show_bar(GtkNotebook* notebook)
|
void show_bar(GtkNotebook* notebook)
|
||||||
{
|
{
|
||||||
if (bar.entry_mode == _SEARCH) {
|
if (bar.entry_mode == _SEARCH) {
|
||||||
|
@ -253,7 +255,46 @@ void show_bar(GtkNotebook* notebook)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int handle_key(func id, GtkNotebook* notebook)
|
// Press enter when on bar
|
||||||
|
void handle_signal_bar_press_enter(GtkEntry* self, GtkNotebook* notebook)
|
||||||
|
{
|
||||||
|
// Defines what happens when the user has typed something in the bar and then presses enter
|
||||||
|
if (bar.entry_mode == _SEARCH)
|
||||||
|
load_uri(notebook_get_webview(notebook),
|
||||||
|
gtk_entry_buffer_get_text(bar.line_text));
|
||||||
|
else if (bar.entry_mode == _FIND)
|
||||||
|
webkit_find_controller_search(
|
||||||
|
webkit_web_view_get_find_controller(notebook_get_webview(notebook)),
|
||||||
|
gtk_entry_buffer_get_text(bar.line_text),
|
||||||
|
WEBKIT_FIND_OPTIONS_CASE_INSENSITIVE | WEBKIT_FIND_OPTIONS_WRAP_AROUND,
|
||||||
|
G_MAXUINT);
|
||||||
|
|
||||||
|
gtk_widget_hide(GTK_WIDGET(bar.widget));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Handle shortcuts */
|
||||||
|
|
||||||
|
// Listen to key presses
|
||||||
|
int handle_signal_keypress(void* self, GdkEvent* event, GtkNotebook* notebook)
|
||||||
|
{
|
||||||
|
(void)self;
|
||||||
|
|
||||||
|
for (int i = 0; i < sizeof(shortcut) / sizeof(shortcut[0]); i++)
|
||||||
|
if ((event->key.state == shortcut[i].mod || shortcut[i].mod == 0x0) && event->key.keyval == shortcut[i].key)
|
||||||
|
return handle_shortcut(shortcut[i].id, notebook);
|
||||||
|
/*
|
||||||
|
If I wanted to bind button presses, like the extra button in the mouse,
|
||||||
|
I would have to bind the button-press-event signal instead.
|
||||||
|
Some links in case I go down that road:
|
||||||
|
- <https://docs.gtk.org/gtk3/signal.Widget.button-press-event.html>
|
||||||
|
- <https://docs.gtk.org/gdk3/union.Event.html>
|
||||||
|
- https://docs.gtk.org/gdk3/struct.EventButton.html
|
||||||
|
*/
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Act when a particular shortcut is detected
|
||||||
|
int handle_shortcut(func id, GtkNotebook* notebook)
|
||||||
{
|
{
|
||||||
static double zoom = ZOOM;
|
static double zoom = ZOOM;
|
||||||
static bool is_fullscreen = 0;
|
static bool is_fullscreen = 0;
|
||||||
|
@ -378,41 +419,6 @@ int handle_key(func id, GtkNotebook* notebook)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int handle_signal_keypress(void* self, GdkEvent* e, GtkNotebook* notebook)
|
|
||||||
{
|
|
||||||
(void)self;
|
|
||||||
|
|
||||||
for (int i = 0; i < sizeof(keys) / sizeof(keys[0]); i++)
|
|
||||||
if ((e->key.state == keys[i].mod || keys[i].mod == 0x0) && e->key.keyval == keys[i].key)
|
|
||||||
return handle_key(keys[i].id, notebook);
|
|
||||||
/*
|
|
||||||
printf("Event type: %d\n", e->type);
|
|
||||||
printf("Keyval: %d\n", e->key.keyval);
|
|
||||||
// Note: if I wanted to bind button presses, like the extra button in the mouse,
|
|
||||||
// I would have to bind the button-press-event signal instead.
|
|
||||||
// Some links in case I go down that road: <https://docs.gtk.org/gtk3/signal.Widget.button-press-event.html>
|
|
||||||
// https://docs.gtk.org/gdk3/union.Event.html
|
|
||||||
// https://docs.gtk.org/gdk3/struct.EventButton.html
|
|
||||||
*/
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void handle_signal_bar_activate(GtkEntry* self, GtkNotebook* notebook)
|
|
||||||
{
|
|
||||||
// Defines what happens when the user has typed something in the bar and then presses enter
|
|
||||||
if (bar.entry_mode == _SEARCH)
|
|
||||||
load_uri(notebook_get_webview(notebook),
|
|
||||||
gtk_entry_buffer_get_text(bar.line_text));
|
|
||||||
else if (bar.entry_mode == _FIND)
|
|
||||||
webkit_find_controller_search(
|
|
||||||
webkit_web_view_get_find_controller(notebook_get_webview(notebook)),
|
|
||||||
gtk_entry_buffer_get_text(bar.line_text),
|
|
||||||
WEBKIT_FIND_OPTIONS_CASE_INSENSITIVE | WEBKIT_FIND_OPTIONS_WRAP_AROUND,
|
|
||||||
G_MAXUINT);
|
|
||||||
|
|
||||||
gtk_widget_hide(GTK_WIDGET(bar.widget));
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char** argv)
|
int main(int argc, char** argv)
|
||||||
{
|
{
|
||||||
// <https://docs.gtk.org/gtk3/func.init.html>
|
// <https://docs.gtk.org/gtk3/func.init.html>
|
||||||
|
@ -443,7 +449,7 @@ int main(int argc, char** argv)
|
||||||
bar.line = GTK_ENTRY(gtk_entry_new_with_buffer(bar.line_text));
|
bar.line = GTK_ENTRY(gtk_entry_new_with_buffer(bar.line_text));
|
||||||
gtk_entry_set_alignment(bar.line, 0.48);
|
gtk_entry_set_alignment(bar.line, 0.48);
|
||||||
gtk_widget_set_size_request(GTK_WIDGET(bar.line), BAR_SIZE, -1);
|
gtk_widget_set_size_request(GTK_WIDGET(bar.line), BAR_SIZE, -1);
|
||||||
g_signal_connect(bar.line, "activate", G_CALLBACK(handle_signal_bar_activate), notebook);
|
g_signal_connect(bar.line, "activate", G_CALLBACK(handle_signal_bar_press_enter), notebook);
|
||||||
|
|
||||||
bar.widget = GTK_HEADER_BAR(gtk_header_bar_new());
|
bar.widget = GTK_HEADER_BAR(gtk_header_bar_new());
|
||||||
gtk_header_bar_set_custom_title(bar.widget, GTK_WIDGET(bar.line));
|
gtk_header_bar_set_custom_title(bar.widget, GTK_WIDGET(bar.line));
|
||||||
|
|
Loading…
Reference in New Issue
Block a user