reworked event system.
This commit is contained in:
parent
5df6c8d6c5
commit
4427474779
1 changed files with 95 additions and 52 deletions
147
surf.c
147
surf.c
|
@ -33,26 +33,71 @@ gboolean ignore_once = FALSE;
|
||||||
extern char *optarg;
|
extern char *optarg;
|
||||||
extern int optind;
|
extern int optind;
|
||||||
|
|
||||||
static Client *newclient();
|
|
||||||
static void die(char *str);
|
|
||||||
static void setup(void);
|
|
||||||
static void cleanup(void);
|
static void cleanup(void);
|
||||||
static void updatetitle(Client *c);
|
|
||||||
static void destroywin(GtkWidget* w, gpointer d);
|
|
||||||
static gboolean keypress(GtkWidget* w, GdkEventKey *ev, gpointer d);
|
|
||||||
static void titlechange(WebKitWebView* view, WebKitWebFrame* frame, const gchar* title, gpointer d);
|
|
||||||
static void progresschange(WebKitWebView *view, gint p, gpointer d);
|
|
||||||
static void loadcommit(WebKitWebView *view, WebKitWebFrame *f, gpointer d);
|
|
||||||
static void linkhover(WebKitWebView* page, const gchar* t, const gchar* l, gpointer d);
|
|
||||||
static void destroyclient(Client *c);
|
|
||||||
static WebKitWebView *newwindow(WebKitWebView *v, WebKitWebFrame *f, gpointer d);
|
|
||||||
static gboolean decidewindow(WebKitWebView *view, WebKitWebFrame *f,
|
static gboolean decidewindow(WebKitWebView *view, WebKitWebFrame *f,
|
||||||
WebKitNetworkRequest *r, WebKitWebNavigationAction *n,
|
WebKitNetworkRequest *r, WebKitWebNavigationAction *n,
|
||||||
WebKitWebPolicyDecision *p, gpointer d);
|
WebKitWebPolicyDecision *p, gpointer d);
|
||||||
|
static void destroyclient(Client *c);
|
||||||
|
static void destroywin(GtkWidget* w, gpointer d);
|
||||||
|
static void die(char *str);
|
||||||
static gboolean download(WebKitWebView *view, GObject *o, gpointer d);
|
static gboolean download(WebKitWebView *view, GObject *o, gpointer d);
|
||||||
static void loaduri(const Client *c, const gchar *uri);
|
static gchar *geturi(Client *c);
|
||||||
|
static void hidesearch(Client *c);
|
||||||
|
static void hideurl(Client *c);
|
||||||
|
static gboolean keypress(GtkWidget* w, GdkEventKey *ev, gpointer d);
|
||||||
|
static void linkhover(WebKitWebView* page, const gchar* t, const gchar* l, gpointer d);
|
||||||
|
static void loadcommit(WebKitWebView *view, WebKitWebFrame *f, gpointer d);
|
||||||
static void loadfile(const Client *c, const gchar *f);
|
static void loadfile(const Client *c, const gchar *f);
|
||||||
GdkFilterReturn processx(GdkXEvent *xevent, GdkEvent *event, gpointer data);
|
static void loaduri(const Client *c, const gchar *uri);
|
||||||
|
static Client *newclient();
|
||||||
|
static WebKitWebView *newwindow(WebKitWebView *v, WebKitWebFrame *f, gpointer d);
|
||||||
|
static void progresschange(WebKitWebView *view, gint p, gpointer d);
|
||||||
|
static GdkFilterReturn processx(GdkXEvent *xevent, GdkEvent *event, gpointer data);
|
||||||
|
static void setup(void);
|
||||||
|
static void showsearch(Client *c);
|
||||||
|
static void showurl(Client *c);
|
||||||
|
static void titlechange(WebKitWebView* view, WebKitWebFrame* frame, const gchar* title, gpointer d);
|
||||||
|
static void updatetitle(Client *c);
|
||||||
|
|
||||||
|
|
||||||
|
gchar *
|
||||||
|
geturi(Client *c) {
|
||||||
|
gchar *uri;
|
||||||
|
|
||||||
|
if(!(uri = (gchar *)webkit_web_view_get_uri(c->view)))
|
||||||
|
uri = g_strdup("about:blank");
|
||||||
|
return uri;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
showurl(Client *c) {
|
||||||
|
gchar *uri;
|
||||||
|
|
||||||
|
hidesearch(c);
|
||||||
|
uri = geturi(c);
|
||||||
|
gtk_entry_set_text(GTK_ENTRY(c->urlbar), uri);
|
||||||
|
gtk_widget_show(c->urlbar);
|
||||||
|
gtk_widget_grab_focus(c->urlbar);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
hideurl(Client *c) {
|
||||||
|
gtk_widget_hide(c->urlbar);
|
||||||
|
gtk_widget_grab_focus(GTK_WIDGET(c->view));
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
showsearch(Client *c) {
|
||||||
|
hideurl(c);
|
||||||
|
gtk_widget_show(c->searchbar);
|
||||||
|
gtk_widget_grab_focus(c->searchbar);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
hidesearch(Client *c) {
|
||||||
|
gtk_widget_hide(c->searchbar);
|
||||||
|
gtk_widget_grab_focus(GTK_WIDGET(c->view));
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cleanup(void) {
|
cleanup(void) {
|
||||||
|
@ -77,7 +122,6 @@ processx(GdkXEvent *e, GdkEvent *event, gpointer d) {
|
||||||
XFree(buf);
|
XFree(buf);
|
||||||
return GDK_FILTER_REMOVE;
|
return GDK_FILTER_REMOVE;
|
||||||
}
|
}
|
||||||
ignore_once = FALSE;
|
|
||||||
}
|
}
|
||||||
return GDK_FILTER_CONTINUE;
|
return GDK_FILTER_CONTINUE;
|
||||||
}
|
}
|
||||||
|
@ -153,8 +197,7 @@ loadcommit(WebKitWebView *view, WebKitWebFrame *f, gpointer d) {
|
||||||
Client *c = (Client *)d;
|
Client *c = (Client *)d;
|
||||||
gchar *uri;
|
gchar *uri;
|
||||||
|
|
||||||
if(!(uri = (gchar *)webkit_web_view_get_uri(view)))
|
uri = geturi(c);
|
||||||
uri = "(null)";
|
|
||||||
ignore_once = TRUE;
|
ignore_once = TRUE;
|
||||||
XChangeProperty(dpy, GDK_WINDOW_XID(GTK_WIDGET(c->win)->window), urlprop,
|
XChangeProperty(dpy, GDK_WINDOW_XID(GTK_WIDGET(c->win)->window), urlprop,
|
||||||
XA_STRING, 8, PropModeReplace, (unsigned char *)uri,
|
XA_STRING, 8, PropModeReplace, (unsigned char *)uri,
|
||||||
|
@ -220,10 +263,42 @@ destroyclient(Client *c) {
|
||||||
gboolean
|
gboolean
|
||||||
keypress(GtkWidget* w, GdkEventKey *ev, gpointer d) {
|
keypress(GtkWidget* w, GdkEventKey *ev, gpointer d) {
|
||||||
Client *c = (Client *)d;
|
Client *c = (Client *)d;
|
||||||
gchar *uri;
|
|
||||||
|
|
||||||
if(ev->type != GDK_KEY_PRESS)
|
if(ev->type != GDK_KEY_PRESS)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
if(GTK_WIDGET_HAS_FOCUS(c->searchbar)) {
|
||||||
|
switch(ev->keyval) {
|
||||||
|
case GDK_Escape:
|
||||||
|
hidesearch(c);
|
||||||
|
return TRUE;
|
||||||
|
case GDK_Return:
|
||||||
|
webkit_web_view_search_text(c->view,
|
||||||
|
gtk_entry_get_text(GTK_ENTRY(c->searchbar)),
|
||||||
|
FALSE,
|
||||||
|
!(ev->state & GDK_SHIFT_MASK),
|
||||||
|
TRUE);
|
||||||
|
return TRUE;
|
||||||
|
case GDK_Left:
|
||||||
|
case GDK_Right:
|
||||||
|
case GDK_r:
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(GTK_WIDGET_HAS_FOCUS(c->urlbar)) {
|
||||||
|
switch(ev->keyval) {
|
||||||
|
case GDK_Escape:
|
||||||
|
hideurl(c);
|
||||||
|
return TRUE;
|
||||||
|
case GDK_Return:
|
||||||
|
loaduri(c, gtk_entry_get_text(GTK_ENTRY(c->urlbar)));
|
||||||
|
hideurl(c);
|
||||||
|
return TRUE;
|
||||||
|
case GDK_Left:
|
||||||
|
case GDK_Right:
|
||||||
|
case GDK_r:
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
if(ev->state == GDK_CONTROL_MASK || ev->state == (GDK_CONTROL_MASK | GDK_SHIFT_MASK)) {
|
if(ev->state == GDK_CONTROL_MASK || ev->state == (GDK_CONTROL_MASK | GDK_SHIFT_MASK)) {
|
||||||
switch(ev->keyval) {
|
switch(ev->keyval) {
|
||||||
case GDK_r:
|
case GDK_r:
|
||||||
|
@ -236,17 +311,10 @@ keypress(GtkWidget* w, GdkEventKey *ev, gpointer d) {
|
||||||
case GDK_b:
|
case GDK_b:
|
||||||
return TRUE;
|
return TRUE;
|
||||||
case GDK_g:
|
case GDK_g:
|
||||||
gtk_widget_hide(c->searchbar);
|
showurl(c);
|
||||||
if(!(uri = (gchar *)webkit_web_view_get_uri(c->view)))
|
|
||||||
uri = "(null)";
|
|
||||||
gtk_entry_set_text(GTK_ENTRY(c->urlbar), uri);
|
|
||||||
gtk_widget_show(c->urlbar);
|
|
||||||
gtk_widget_grab_focus(c->urlbar);
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
case GDK_slash:
|
case GDK_slash:
|
||||||
gtk_widget_hide(c->urlbar);
|
showsearch(c);
|
||||||
gtk_widget_show(c->searchbar);
|
|
||||||
gtk_widget_grab_focus(c->searchbar);
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
case GDK_Left:
|
case GDK_Left:
|
||||||
webkit_web_view_go_back(c->view);
|
webkit_web_view_go_back(c->view);
|
||||||
|
@ -256,31 +324,6 @@ keypress(GtkWidget* w, GdkEventKey *ev, gpointer d) {
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
switch(ev->keyval) {
|
|
||||||
case GDK_Escape:
|
|
||||||
if(!GTK_WIDGET_HAS_FOCUS(c->searchbar) && !GTK_WIDGET_HAS_FOCUS(c->urlbar))
|
|
||||||
return FALSE;
|
|
||||||
gtk_widget_hide(c->urlbar);
|
|
||||||
gtk_widget_hide(c->searchbar);
|
|
||||||
gtk_widget_grab_focus(GTK_WIDGET(c->view));
|
|
||||||
return TRUE;
|
|
||||||
case GDK_Return:
|
|
||||||
if(GTK_WIDGET_HAS_FOCUS(c->urlbar)) {
|
|
||||||
loaduri(c, gtk_entry_get_text(GTK_ENTRY(c->urlbar)));
|
|
||||||
gtk_widget_hide(c->urlbar);
|
|
||||||
gtk_widget_grab_focus(GTK_WIDGET(c->view));
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
else if(GTK_WIDGET_HAS_FOCUS(c->searchbar)) {
|
|
||||||
webkit_web_view_search_text(c->view,
|
|
||||||
gtk_entry_get_text(GTK_ENTRY(c->searchbar)),
|
|
||||||
FALSE,
|
|
||||||
!(ev->state & GDK_SHIFT_MASK),
|
|
||||||
TRUE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue