Add fullscreen function
This commit is contained in:
parent
a79e00bcdc
commit
b0f9f5f421
3
config.h
3
config.h
|
@ -11,5 +11,6 @@ static Key keys[] = {
|
||||||
{ MODKEY, GDK_KEY_h, goback },
|
{ MODKEY, GDK_KEY_h, goback },
|
||||||
{ MODKEY, GDK_KEY_l, goforward },
|
{ MODKEY, GDK_KEY_l, goforward },
|
||||||
{ MODKEY, GDK_KEY_y, copy_url },
|
{ MODKEY, GDK_KEY_y, copy_url },
|
||||||
{ MODKEY, GDK_KEY_p, paste_url }
|
{ MODKEY, GDK_KEY_p, paste_url },
|
||||||
|
{ 0, GDK_KEY_F11, fullscreen }
|
||||||
};
|
};
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
#include <gdk/gdk.h>
|
#include <gdk/gdk.h>
|
||||||
#include <gdk/gdkkeysyms.h>
|
#include <gdk/gdkkeysyms.h>
|
||||||
|
|
||||||
|
#define NONE 4
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
unsigned modkey;
|
unsigned modkey;
|
||||||
unsigned keycod;
|
unsigned keycod;
|
||||||
|
@ -13,5 +15,6 @@ enum {
|
||||||
goback,
|
goback,
|
||||||
goforward,
|
goforward,
|
||||||
copy_url,
|
copy_url,
|
||||||
paste_url
|
paste_url,
|
||||||
|
fullscreen
|
||||||
};
|
};
|
||||||
|
|
2
rose.c
2
rose.c
|
@ -30,7 +30,7 @@ int main(int argc, char **argv)
|
||||||
argv++; argc--;
|
argv++; argc--;
|
||||||
}
|
}
|
||||||
|
|
||||||
GtkApplication *app = gtk_application_new("org.gtk.rose", G_APPLICATION_FLAGS_NONE);
|
GtkApplication *app = gtk_application_new("org.gtk.rose", G_APPLICATION_NON_UNIQUE);
|
||||||
g_signal_connect(app, "activate", G_CALLBACK(run), NULL);
|
g_signal_connect(app, "activate", G_CALLBACK(run), NULL);
|
||||||
g_application_run(G_APPLICATION(app), argc, argv);
|
g_application_run(G_APPLICATION(app), argc, argv);
|
||||||
}
|
}
|
||||||
|
|
24
window.c
24
window.c
|
@ -33,38 +33,43 @@ static void read_clipboard(GObject *object,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean key_press_callback(WebKitWebView *webview,
|
static gboolean key_press_callback(RoseWindow *window,
|
||||||
guint keyval,
|
guint keyval,
|
||||||
guint keycode,
|
guint keycode,
|
||||||
GdkModifierType state)
|
GdkModifierType state)
|
||||||
{
|
{
|
||||||
if (state & GDK_CONTROL_MASK) {
|
|
||||||
for (int i = 0; i < LENGTH(keys); i++) {
|
for (int i = 0; i < LENGTH(keys); i++) {
|
||||||
if (keys[i].modkey == GDK_CONTROL_MASK
|
if (keys[i].modkey == state
|
||||||
&& keys[i].keycod == keyval) {
|
&& keys[i].keycod == keyval) {
|
||||||
switch (keys[i].funcid) {
|
switch (keys[i].funcid) {
|
||||||
case goback:
|
case goback:
|
||||||
webkit_web_view_go_back(webview);
|
webkit_web_view_go_back(window->webview);
|
||||||
break;
|
break;
|
||||||
case goforward:
|
case goforward:
|
||||||
webkit_web_view_go_forward(webview);
|
webkit_web_view_go_forward(window->webview);
|
||||||
break;
|
break;
|
||||||
case copy_url: {
|
case copy_url: {
|
||||||
GdkDisplay *dpy = gdk_display_get_default();
|
GdkDisplay *dpy = gdk_display_get_default();
|
||||||
gdk_clipboard_set_text(
|
gdk_clipboard_set_text(
|
||||||
gdk_display_get_clipboard(dpy),
|
gdk_display_get_clipboard(dpy),
|
||||||
webkit_web_view_get_uri(webview)
|
webkit_web_view_get_uri(window->webview)
|
||||||
);
|
);
|
||||||
} break;
|
} break;
|
||||||
case paste_url: {
|
case paste_url: {
|
||||||
GdkDisplay *dpy = gdk_display_get_default();
|
GdkDisplay *dpy = gdk_display_get_default();
|
||||||
GdkClipboard *clipboard = gdk_display_get_clipboard(dpy);
|
GdkClipboard *clipboard = gdk_display_get_clipboard(dpy);
|
||||||
gdk_clipboard_read_text_async(clipboard, NULL, read_clipboard, webview);
|
gdk_clipboard_read_text_async(clipboard, NULL, read_clipboard, window->webview);
|
||||||
} break;
|
} break;
|
||||||
|
case fullscreen:
|
||||||
|
if (gtk_window_is_fullscreen(window->window))
|
||||||
|
gtk_window_unfullscreen(GTK_WINDOW(window->window));
|
||||||
|
else
|
||||||
|
gtk_window_fullscreen(GTK_WINDOW(window->window));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return GDK_EVENT_PROPAGATE;
|
return GDK_EVENT_PROPAGATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,12 +96,13 @@ static void rose_window_init(RoseWindow *window)
|
||||||
void rose_window_show(RoseWindow *window)
|
void rose_window_show(RoseWindow *window)
|
||||||
{
|
{
|
||||||
GtkWidget *w = gtk_window_new();
|
GtkWidget *w = gtk_window_new();
|
||||||
|
window->window = GTK_WINDOW(w);
|
||||||
gtk_window_set_child(GTK_WINDOW(w), GTK_WIDGET(window->webview));
|
gtk_window_set_child(GTK_WINDOW(w), GTK_WIDGET(window->webview));
|
||||||
|
|
||||||
/* Keyboard shortcuts */
|
/* Keyboard shortcuts */
|
||||||
GtkEventController *controller;
|
GtkEventController *controller;
|
||||||
controller = gtk_event_controller_key_new();
|
controller = gtk_event_controller_key_new();
|
||||||
g_signal_connect_swapped(controller, "key-pressed", G_CALLBACK(key_press_callback), window->webview);
|
g_signal_connect_swapped(controller, "key-pressed", G_CALLBACK(key_press_callback), window);
|
||||||
gtk_widget_add_controller(GTK_WIDGET(w), controller);
|
gtk_widget_add_controller(GTK_WIDGET(w), controller);
|
||||||
|
|
||||||
gtk_widget_show(w);
|
gtk_widget_show(w);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user