add scroll keybinds, remove ghost webkit process
This commit is contained in:
parent
b132abcd23
commit
40475f9520
5
config.h
5
config.h
|
@ -15,5 +15,8 @@ static Key keys[] = {
|
||||||
{ MODKEY, GDK_KEY_e, search },
|
{ MODKEY, GDK_KEY_e, search },
|
||||||
{ MODKEY, GDK_KEY_equal, zoomin },
|
{ MODKEY, GDK_KEY_equal, zoomin },
|
||||||
{ MODKEY, GDK_KEY_minus, zoomout },
|
{ MODKEY, GDK_KEY_minus, zoomout },
|
||||||
{ 0, GDK_KEY_F11, fullscreen },
|
{ MODKEY, GDK_KEY_i, inspector },
|
||||||
|
{ MODKEY, GDK_KEY_j, down },
|
||||||
|
{ MODKEY, GDK_KEY_k, up },
|
||||||
|
{ 0, GDK_KEY_F11, fullscreen }
|
||||||
};
|
};
|
||||||
|
|
|
@ -20,5 +20,7 @@ enum {
|
||||||
inspector,
|
inspector,
|
||||||
search,
|
search,
|
||||||
zoomin,
|
zoomin,
|
||||||
zoomout
|
zoomout,
|
||||||
|
down,
|
||||||
|
up
|
||||||
};
|
};
|
||||||
|
|
4
makefile
4
makefile
|
@ -1,7 +1,7 @@
|
||||||
CC = clang
|
CC = clang
|
||||||
CFLAGS = `pkg-config --cflags gtk4 webkit2gtk-5.0 x11 `
|
CFLAGS = `pkg-config --cflags gtk4 webkit2gtk-5.0 x11 `
|
||||||
LIBS = `pkg-config --libs gtk4 webkit2gtk-5.0 x11`
|
LIBS = `pkg-config --libs gtk4 webkit2gtk-5.0 x11`
|
||||||
GTKFLAGS = -Dgtk_doc=false -Dintrospection=false \
|
OPTIONS = -Dgtk_doc=false -Dintrospection=false \
|
||||||
-DG_DISABLE_CAST_CHECKS \
|
-DG_DISABLE_CAST_CHECKS \
|
||||||
-Dcloudproviders=false \
|
-Dcloudproviders=false \
|
||||||
-DGTK_DISABLE_DEPRECATED \
|
-DGTK_DISABLE_DEPRECATED \
|
||||||
|
@ -18,7 +18,7 @@ GTKFLAGS = -Dgtk_doc=false -Dintrospection=false \
|
||||||
|
|
||||||
|
|
||||||
all:
|
all:
|
||||||
${CC} -fPIC -Os -o rose *.c $(CFLAGS) $(LIBS) $(GTKFLAGS)
|
${CC} -fPIC -O3 -o rose *.c $(CFLAGS) $(LIBS) $(OPTIONS)
|
||||||
strip ./rose
|
strip ./rose
|
||||||
|
|
||||||
install: all
|
install: all
|
||||||
|
|
53
rose.c
53
rose.c
|
@ -5,17 +5,6 @@
|
||||||
|
|
||||||
guint xid;
|
guint xid;
|
||||||
|
|
||||||
void
|
|
||||||
sigchld(int unused)
|
|
||||||
{
|
|
||||||
if (signal(SIGCHLD, sigchld) == SIG_ERR) {
|
|
||||||
puts("Can't install SIGCHLD handler");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
while (waitpid(-1, NULL, WNOHANG) > 0)
|
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
setatom(int a, const char *v)
|
setatom(int a, const char *v)
|
||||||
{
|
{
|
||||||
|
@ -25,31 +14,6 @@ setatom(int a, const char *v)
|
||||||
XSync(dpy, False);
|
XSync(dpy, False);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
|
||||||
readsock(GIOChannel *s, GIOCondition ioc, gpointer unused)
|
|
||||||
{
|
|
||||||
static char msg[MSGBUFSZ];
|
|
||||||
GError *gerr = NULL;
|
|
||||||
gsize msgsz;
|
|
||||||
|
|
||||||
if (g_io_channel_read_chars(s, msg, sizeof(msg), &msgsz, &gerr) !=
|
|
||||||
G_IO_STATUS_NORMAL) {
|
|
||||||
if (gerr) {
|
|
||||||
fprintf(stderr, "surf: error reading socket: %s\n",
|
|
||||||
gerr->message);
|
|
||||||
g_error_free(gerr);
|
|
||||||
}
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (msgsz < 2) {
|
|
||||||
fprintf(stderr, "surf: message too short: %lu\n", msgsz);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
getatom(int a)
|
getatom(int a)
|
||||||
{
|
{
|
||||||
|
@ -74,10 +38,6 @@ getatom(int a)
|
||||||
|
|
||||||
static void setup()
|
static void setup()
|
||||||
{
|
{
|
||||||
GIOChannel *gchanin;
|
|
||||||
|
|
||||||
sigchld(0);
|
|
||||||
|
|
||||||
if (!(dpy = XOpenDisplay(NULL))) {
|
if (!(dpy = XOpenDisplay(NULL))) {
|
||||||
puts("Can't open default display");
|
puts("Can't open default display");
|
||||||
exit(1);
|
exit(1);
|
||||||
|
@ -87,18 +47,6 @@ static void setup()
|
||||||
atoms[AtomGo] = XInternAtom(dpy, "_ROSE_GO", False);
|
atoms[AtomGo] = XInternAtom(dpy, "_ROSE_GO", False);
|
||||||
atoms[AtomUri] = XInternAtom(dpy, "_ROSE_URI", False);
|
atoms[AtomUri] = XInternAtom(dpy, "_ROSE_URI", False);
|
||||||
atoms[AtomUTF8] = XInternAtom(dpy, "UTF8_STRING", False);
|
atoms[AtomUTF8] = XInternAtom(dpy, "UTF8_STRING", False);
|
||||||
|
|
||||||
if (socketpair(AF_UNIX, SOCK_DGRAM, 0, spair) < 0) {
|
|
||||||
fputs("Unable to create sockets\n", stderr);
|
|
||||||
spair[0] = spair[1] = -1;
|
|
||||||
} else {
|
|
||||||
gchanin = g_io_channel_unix_new(spair[0]);
|
|
||||||
g_io_channel_set_encoding(gchanin, NULL, NULL);
|
|
||||||
g_io_channel_set_flags(gchanin, g_io_channel_get_flags(gchanin)
|
|
||||||
| G_IO_FLAG_NONBLOCK, NULL);
|
|
||||||
g_io_channel_set_close_on_unref(gchanin, TRUE);
|
|
||||||
g_io_add_watch(gchanin, G_IO_IN, readsock, NULL);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void run(GtkApplication *app)
|
static void run(GtkApplication *app)
|
||||||
|
@ -124,4 +72,5 @@ int main(int argc, char **argv)
|
||||||
GtkApplication *app = gtk_application_new("org.gtk.rose", G_APPLICATION_NON_UNIQUE);
|
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);
|
||||||
|
g_object_unref(app);
|
||||||
}
|
}
|
||||||
|
|
35
window.c
35
window.c
|
@ -1,10 +1,9 @@
|
||||||
#include "window.h"
|
#include "window.h"
|
||||||
#include "rose.h"
|
#include "rose.h"
|
||||||
/* #include "gestures.h" */
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "webview.h"
|
#include "webview.h"
|
||||||
|
|
||||||
#define LENGTH(x) (sizeof(x) / sizeof(x[0]))
|
#define LENGTH(x) ((int) (sizeof(x) / sizeof(x[0])))
|
||||||
|
|
||||||
struct _RoseWindow {
|
struct _RoseWindow {
|
||||||
GtkApplicationWindow parent_instance;
|
GtkApplicationWindow parent_instance;
|
||||||
|
@ -12,6 +11,7 @@ struct _RoseWindow {
|
||||||
guint xid;
|
guint xid;
|
||||||
GtkWindow *window;
|
GtkWindow *window;
|
||||||
WebKitWebView *webview;
|
WebKitWebView *webview;
|
||||||
|
WebKitWebInspector *inspector;
|
||||||
GHashTable *action_groups;
|
GHashTable *action_groups;
|
||||||
GHashTable *action_labels;
|
GHashTable *action_labels;
|
||||||
};
|
};
|
||||||
|
@ -28,8 +28,7 @@ static void read_clipboard(GObject *object,
|
||||||
GAsyncResult *res,
|
GAsyncResult *res,
|
||||||
gpointer webview)
|
gpointer webview)
|
||||||
{
|
{
|
||||||
GdkDisplay *dpy = gdk_display_get_default();
|
GdkClipboard *clipboard = GDK_CLIPBOARD(object);
|
||||||
GdkClipboard *clipboard = gdk_display_get_clipboard(dpy);
|
|
||||||
webkit_web_view_load_uri(
|
webkit_web_view_load_uri(
|
||||||
WEBKIT_WEB_VIEW(webview),
|
WEBKIT_WEB_VIEW(webview),
|
||||||
gdk_clipboard_read_text_finish(clipboard, res, NULL)
|
gdk_clipboard_read_text_finish(clipboard, res, NULL)
|
||||||
|
@ -41,6 +40,8 @@ static gboolean key_press_callback(RoseWindow *window,
|
||||||
guint keycode,
|
guint keycode,
|
||||||
GdkModifierType state)
|
GdkModifierType state)
|
||||||
{
|
{
|
||||||
|
if (!state)
|
||||||
|
return GDK_EVENT_PROPAGATE;
|
||||||
|
|
||||||
for (int i = 0; i < LENGTH(keys); i++) {
|
for (int i = 0; i < LENGTH(keys); i++) {
|
||||||
if (keys[i].modkey == state
|
if (keys[i].modkey == state
|
||||||
|
@ -95,12 +96,24 @@ static gboolean key_press_callback(RoseWindow *window,
|
||||||
zoom -= 0.1;
|
zoom -= 0.1;
|
||||||
webkit_web_view_set_zoom_level(window->webview, zoom);
|
webkit_web_view_set_zoom_level(window->webview, zoom);
|
||||||
break;
|
break;
|
||||||
|
case inspector:
|
||||||
|
window->inspector = webkit_web_view_get_inspector(window->webview);
|
||||||
|
if (webkit_web_inspector_is_attached(window->inspector))
|
||||||
|
webkit_web_inspector_close(window->inspector);
|
||||||
|
else
|
||||||
|
webkit_web_inspector_show(window->inspector);
|
||||||
|
return GDK_EVENT_STOP;
|
||||||
|
break;
|
||||||
|
case up:
|
||||||
|
webkit_web_view_run_javascript(window->webview, "window.scrollBy(0,-100);", NULL, NULL, NULL);
|
||||||
|
break;
|
||||||
|
case down:
|
||||||
|
webkit_web_view_run_javascript(window->webview, "window.scrollBy(0,100);", NULL, NULL, NULL);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("%i\n", keyval);
|
|
||||||
puts("");
|
|
||||||
return GDK_EVENT_PROPAGATE;
|
return GDK_EVENT_PROPAGATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,6 +127,11 @@ static void rose_window_init(RoseWindow *window)
|
||||||
window->window = GTK_WINDOW(gtk_window_new());
|
window->window = GTK_WINDOW(gtk_window_new());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void destroy(RoseWindow *window)
|
||||||
|
{
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
guint rose_window_show(GtkApplication *app, RoseWindow *window, const char *url)
|
guint rose_window_show(GtkApplication *app, RoseWindow *window, const char *url)
|
||||||
{
|
{
|
||||||
GtkWidget *w = gtk_application_window_new(app);
|
GtkWidget *w = gtk_application_window_new(app);
|
||||||
|
@ -125,6 +143,11 @@ guint rose_window_show(GtkApplication *app, RoseWindow *window, const char *url)
|
||||||
gtk_window_set_destroy_with_parent(GTK_WINDOW(w), TRUE);
|
gtk_window_set_destroy_with_parent(GTK_WINDOW(w), TRUE);
|
||||||
window->webview = WEBKIT_WEB_VIEW(webview);
|
window->webview = WEBKIT_WEB_VIEW(webview);
|
||||||
|
|
||||||
|
g_signal_connect(G_OBJECT(w), "destroy",
|
||||||
|
G_CALLBACK(destroy), window);
|
||||||
|
g_signal_connect(G_OBJECT(window->webview), "web-process-terminated",
|
||||||
|
G_CALLBACK(destroy), window);
|
||||||
|
|
||||||
if (url)
|
if (url)
|
||||||
rose_webview_load_url(WEBKIT_WEB_VIEW(webview), url);
|
rose_webview_load_url(WEBKIT_WEB_VIEW(webview), url);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user