aboutsummaryrefslogtreecommitdiff
path: root/callbacks.c
diff options
context:
space:
mode:
Diffstat (limited to 'callbacks.c')
-rw-r--r--callbacks.c162
1 files changed, 99 insertions, 63 deletions
diff --git a/callbacks.c b/callbacks.c
index f91d80c..1daefc4 100644
--- a/callbacks.c
+++ b/callbacks.c
@@ -13,81 +13,108 @@
/* key press callback function. NEEDED: a config.h where keys are defined */
gboolean cb_keypress (GtkWidget *widget, GdkEventKey *event) {
-guint(g) = event->keyval;
-
-if ( (event->state & GDK_CONTROL_MASK) == GDK_CONTROL_MASK ) {
- switch(g) {
- case GDK_KEY_l: grab_bar(); return TRUE; break;
- case GDK_KEY_f: show_search(TRUE); return TRUE; break;
- case GDK_KEY_g: tab_and_go(); return TRUE; break;
- case GDK_KEY_Back: cb_go(FALSE); return TRUE; break;
- case GDK_KEY_Forward: cb_go(TRUE); return TRUE; break;
- case GDK_KEY_comma: cb_go(FALSE); return TRUE; break;
- case GDK_KEY_period: cb_go(TRUE); return TRUE; break;
- case GDK_KEY_o: history_command(); return TRUE; break;
- case GDK_KEY_h: toggle(); focus_view(); return TRUE; break;
- case GDK_KEY_Page_Up: tab_switch(FALSE); return TRUE; break;
- case GDK_KEY_Page_Down: tab_switch(TRUE); return TRUE; break;
- case GDK_KEY_t: tab_new(FALSE); gtk_widget_grab_focus(w.bar); return TRUE; break;
- case GDK_KEY_w: tab_close(); return TRUE; break;
- case GDK_KEY_bracketright: tab_zoom(TRUE); return TRUE; break;
- case GDK_KEY_bracketleft: tab_zoom(FALSE); return TRUE; break;
- case GDK_KEY_r: tab_reload(TRUE); return TRUE; break;
- case GDK_KEY_e: tab_reload(FALSE); return TRUE; break;
- case GDK_KEY_s: tab_view_source(); return TRUE; break;
- case GDK_KEY_Return: load_uri(g_strconcat(DEFAULT_SEARCH, gtk_entry_get_text(GTK_ENTRY(w.bar)), NULL)); return TRUE; break;
- default: return FALSE; break;
+
+ guint(g) = event->keyval;
+
+ /* yes while this may look like it doesn't follow coding standards, I find this sane */
+ if ( (event->state & GDK_CONTROL_MASK) == GDK_CONTROL_MASK ) {
+ switch(g) {
+ case GDK_KEY_l: grab_bar(); return TRUE; break;
+ case GDK_KEY_f: show_search(TRUE); return TRUE; break;
+ case GDK_KEY_g: tab_and_go(); return TRUE; break;
+ case GDK_KEY_Back: cb_go(FALSE); return TRUE; break;
+ case GDK_KEY_Forward: cb_go(TRUE); return TRUE; break;
+ case GDK_KEY_comma: cb_go(FALSE); return TRUE; break;
+ case GDK_KEY_period: cb_go(TRUE); return TRUE; break;
+ case GDK_KEY_o: history_command(); return TRUE; break;
+ case GDK_KEY_h: toggle(); focus_view(); return TRUE; break;
+ case GDK_KEY_Page_Up: tab_switch(FALSE); return TRUE; break;
+ case GDK_KEY_Page_Down: tab_switch(TRUE); return TRUE; break;
+ case GDK_KEY_t: tab_new(FALSE); gtk_widget_grab_focus(w.bar); return TRUE; break;
+ case GDK_KEY_w: tab_close(); return TRUE; break;
+ case GDK_KEY_bracketright: tab_zoom(TRUE); return TRUE; break;
+ case GDK_KEY_bracketleft: tab_zoom(FALSE); return TRUE; break;
+ case GDK_KEY_r: tab_reload(TRUE); return TRUE; break;
+ case GDK_KEY_e: tab_reload(FALSE); return TRUE; break;
+ case GDK_KEY_s: tab_view_source(); return TRUE; break;
+ case GDK_KEY_Return: load_uri(g_strconcat(DEFAULT_SEARCH, gtk_entry_get_text(GTK_ENTRY(w.bar)), NULL)); return TRUE; break;
+ default: return FALSE; break;
+ }
}
-}
+ if (gtk_widget_has_focus(w.bar) && g == GDK_KEY_Escape)
+ {
+ gtk_widget_grab_focus(GTK_WIDGET(w.notebook));
+ return TRUE;
+ }
-if (gtk_widget_has_focus(w.bar) && g == GDK_KEY_Escape) { gtk_widget_grab_focus(GTK_WIDGET(w.notebook)); return TRUE; }
-if (gtk_widget_has_focus(w.searchbar)) {
- if (g == GDK_KEY_Escape) { show_search(FALSE); focus_view(); return TRUE; }
- if ((g == GDK_KEY_Return) && (event->state & GDK_MOD1_MASK) == GDK_MOD1_MASK) { search(NULL, FALSE); }
-}
-return FALSE;
+ if (gtk_widget_has_focus(w.searchbar)) {
+ if (g == GDK_KEY_Escape) {
+ show_search(FALSE);
+ focus_view();
+ return TRUE;
+ }
+
+ if ((g == GDK_KEY_Return) && (event->state & GDK_MOD1_MASK) == GDK_MOD1_MASK)
+ {
+ search(NULL, FALSE);
+ }
+ }
+
+ return FALSE;
}
/* download callback */
void cb_download(WebKitWebView *web_view, GObject *d, gpointer user_data) {
- gchar *command;
-const gchar *download_url = webkit_download_get_uri(WEBKIT_DOWNLOAD(d));
-const gchar *requested_name = webkit_download_get_suggested_filename(WEBKIT_DOWNLOAD(d));
-command = g_new0(gchar, strlen(DEFAULT_DOWNLOAD_COMMAND) + strlen(DEFAULT_DOWNLOAD_LOCATION) + strlen(requested_name) + strlen(download_url) + 1);
-g_sprintf(command, DEFAULT_DOWNLOAD_COMMAND, DEFAULT_DOWNLOAD_LOCATION, requested_name, download_url);
+ gchar *command;
+ const gchar *download_url = webkit_download_get_uri(WEBKIT_DOWNLOAD(d));
+ const gchar *requested_name = webkit_download_get_suggested_filename(WEBKIT_DOWNLOAD(d));
-g_spawn_command_line_async(command, NULL);
-g_free(command);
+ command = g_new0(gchar, strlen(DEFAULT_DOWNLOAD_COMMAND) + strlen(DEFAULT_DOWNLOAD_LOCATION) + strlen(requested_name) + strlen(download_url) + 1);
+ g_sprintf(command, DEFAULT_DOWNLOAD_COMMAND, DEFAULT_DOWNLOAD_LOCATION, requested_name, download_url);
+ g_spawn_command_line_async(command, NULL);
+ g_free(command);
}
-
/* entry callback */
void cb_entry (GtkWidget* entry, gpointer data) {
-struct tab *t = get_tab(NULL, gtk_notebook_get_current_page(w.notebook));
-load_uri(g_strdup(gtk_entry_get_text (GTK_ENTRY (w.bar))));
-gtk_widget_grab_focus(GTK_WIDGET(t->view));
+
+ struct tab *t = get_tab(NULL, gtk_notebook_get_current_page(w.notebook));
-if(w.hide) {
- gtk_widget_hide(w.bar);
+ load_uri(g_strdup(gtk_entry_get_text (GTK_ENTRY (w.bar))));
+ gtk_widget_grab_focus(GTK_WIDGET(t->view));
+
+ if(w.hide) {
+ gtk_widget_hide(w.bar);
}
-w.hide = FALSE;
-
+
+ w.hide = FALSE;
}
/* link hovering callback */
void cb_link_hover (WebKitWebView* page, const gchar* title, const gchar* link, gpointer data) {
-if(link != NULL) { gtk_statusbar_push(GTK_STATUSBAR(w.status), 0, link); }
-else { gtk_statusbar_push(GTK_STATUSBAR(w.status), 0, ""); }
+
+ if(link != NULL) {
+ gtk_statusbar_push(GTK_STATUSBAR(w.status), 0, link);
+ }
+ else {
+ gtk_statusbar_push(GTK_STATUSBAR(w.status), 0, "");
+ }
}
/* go forward or backwards, simple enough */
void cb_go(gboolean b) {
-struct tab *t = get_tab(NULL, gtk_notebook_get_current_page(w.notebook));
-if (b) { webkit_web_view_go_forward(t->view); }
-else { webkit_web_view_go_back(t->view); }
+
+ struct tab *t = get_tab(NULL, gtk_notebook_get_current_page(w.notebook));
+
+ if (b) {
+ webkit_web_view_go_forward(t->view);
+ }
+ else {
+ webkit_web_view_go_back(t->view);
+ }
}
@@ -96,9 +123,10 @@ void cb_load_status (GObject* object, GParamSpec* pspec, tab *t) {
const gchar* uri = webkit_web_view_get_uri(t->view);
WebKitLoadStatus status = webkit_web_view_get_load_status(t->view);
+
switch(status) {
case WEBKIT_LOAD_PROVISIONAL:
- break;
+ break;
case WEBKIT_LOAD_COMMITTED:
if (gtk_notebook_get_current_page(w.notebook) == gtk_notebook_page_num(w.notebook, t->scroll)) {
@@ -106,9 +134,12 @@ void cb_load_status (GObject* object, GParamSpec* pspec, tab *t) {
}
FILE *history = fopen(g_build_filename(g_get_home_dir(), DEFAULT_HISTORY_FILE, NULL), "a+");
+
+ if(!history == NULL) {
fprintf(history, "%s \n", uri);
fclose(history);
-
+ }
+
break;
case WEBKIT_LOAD_FIRST_VISUALLY_NON_EMPTY_LAYOUT:
break;
@@ -118,20 +149,25 @@ void cb_load_status (GObject* object, GParamSpec* pspec, tab *t) {
break;
default:
break;
- }
-
+ }
}
-
/* title change callback */
void cb_title_changed(WebKitWebView *v, WebKitWebFrame *f, const char *title, tab *t) {
-gchar *tabtitle;
-if (gtk_notebook_get_current_page(w.notebook) == gtk_notebook_page_num(w.notebook, t->scroll)) {
-gtk_window_set_title(GTK_WINDOW(w.win), g_strconcat(title, NULL));
-}
-if(strlen(title) < DEFAULT_TAB_LENGTH ) { tabtitle = g_strdup(title); }
- else { tabtitle = g_strndup(title, DEFAULT_TAB_LENGTH); strcat(tabtitle, "..."); }
+ gchar *tabtitle;
+
+ if(gtk_notebook_get_current_page(w.notebook) == gtk_notebook_page_num(w.notebook, t->scroll)) {
+ gtk_window_set_title(GTK_WINDOW(w.win), g_strconcat(title, NULL));
+ }
+
+ if(strlen(title) < DEFAULT_TAB_LENGTH ) {
+ tabtitle = g_strdup(title);
+ }
+ else {
+ tabtitle = g_strndup(title, DEFAULT_TAB_LENGTH);
+ strcat(tabtitle, "...");
+ }
-gtk_label_set_label(GTK_LABEL(t->label), tabtitle);
+ gtk_label_set_label(GTK_LABEL(t->label), tabtitle);
}