aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormutantturkey <crazycal00@gmail.com>2010-05-06 13:04:12 -0400
committermutantturkey <crazycal00@gmail.com>2010-05-06 13:04:12 -0400
commit4cfa162eaa5ed89a3671d640e656e286ccd17f89 (patch)
tree727abc17b8368c7f884b50870691ca9e74656276
parent949618f667f1a928697805894addf8608696aa14 (diff)
major code rework, almost everything is got rewritten, seg faults =[
-rw-r--r--sb.c164
1 files changed, 83 insertions, 81 deletions
diff --git a/sb.c b/sb.c
index 751479b..1f95a23 100644
--- a/sb.c
+++ b/sb.c
@@ -5,37 +5,35 @@
#include <gtk/gtk.h>
#include <webkit/webkit.h>
#include <gdk/gdkkeysyms.h>
-typedef struct tab {
- GtkWidget *scroll;
- gchar *main_title;
- gint load_progress;
- guint status_context_id;
- WebKitWebView *view;
- WebKitWebSettings *settings;
-} tab;
-
-typedef struct window {
- GtkWidget *win;
- GtkWidget *bar;
- GtkWidget *search;
- GtkWidget *vbox;
- GtkWidget *notebook;
- GtkWidget *status;
-} window;
-
+typedef struct tab { GtkWidget *scroll; GtkWidget *label; gchar *main_title; gint load_progress; guint status_context_id; WebKitWebView *view; WebKitWebSettings *settings; } tab;
+static struct { GtkWidget *win; GtkWidget *bar; GtkWidget *search; GtkWidget *vbox; GtkWidget *notebook; GtkWidget *status; } w;
+#define get_tab(x, page_idx ) (struct tab*)g_object_get_qdata(G_OBJECT( gtk_notebook_get_nth_page( (GtkNotebook*)w.notebook, page_idx ) ), term_data_id);
+static GQuark term_data_id = 0;
+
+static void activate_uri_entry_cb(GtkWidget* entry, tab *t);
+static void update_title(const gchar* title, gchar* linkhover);
+static void link_hover_cb (WebKitWebView* page, const gchar* title, const gchar* link, gpointer data);
+static void title_change_cb (WebKitWebView* web_view, WebKitWebFrame* web_frame, const gchar* title, gpointer data);
+static void progress_change_cb (WebKitWebView* page, gint progress, gpointer data);
+static void load_commit_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data);
+static void destroy_cb (GtkWidget* widget, gpointer data);
+static void go_cb(gboolean b);
+static void new_tab();
+static void config();
+gboolean key_press_cb(GtkWidget *widget, GdkEventKey *event);
static void activate_uri_entry_cb (GtkWidget* entry, tab *t) {
- const gchar* uri = gtk_entry_get_text (GTK_ENTRY (sb.bar));
- webkit_web_view_open (sb.view, uri);
- gtk_widget_grab_focus(GTK_WIDGET(sb.view));
+ const gchar* uri = gtk_entry_get_text (GTK_ENTRY (w.bar));
+ webkit_web_view_open (t->view, uri);
+ gtk_widget_grab_focus(GTK_WIDGET(t->view));
}
-static void update_title (const gchar* title, gchar* linkhover, window *w) {
+static void update_title (const gchar* title, gchar* linkhover) {
if (linkhover) title = g_strdup(linkhover);
- gtk_window_set_title(GTK_WINDOW(*w->win), title);
+ gtk_window_set_title(GTK_WINDOW(w.win), title);
g_free(linkhover);
}
@@ -56,99 +54,103 @@ static void progress_change_cb (WebKitWebView* page, gint progress, gpointer dat
static void load_commit_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data) {
const gchar* uri = webkit_web_frame_get_uri(frame);
if (uri)
- gtk_entry_set_text (GTK_ENTRY (sb.bar), uri);
+ gtk_entry_set_text (GTK_ENTRY (w.bar), uri);
}
static void destroy_cb (GtkWidget* widget, gpointer data) {
gtk_main_quit ();
}
-static void go_back_cb (GtkWidget* widget, gpointer data) {
- webkit_web_view_go_back (sb.view);
-}
-
-static void go_forward_cb (GtkWidget* widget, gpointer data) {
- webkit_web_view_go_forward (sb.view);
+static void go_cb (gboolean b) {
+ gint page = gtk_notebook_get_current_page(GTK_NOTEBOOK(w.notebook));
+ struct tab *t;
+ t = get_tab(NULL, page);
+ if (b) { webkit_web_view_go_forward(t->view); }
+ else { webkit_web_view_go_back(t->view); }
}
-tab *t new_tab () {
+static void new_tab() {
/*seperate function so it will be easier to setup the webkit crap*/
tab *t;
t = g_new0(tab, 1);
+
+
t->scroll = gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(t->scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
- sb.view = WEBKIT_WEB_VIEW (webkit_web_view_new ());
- gtk_container_add(GTK_CONTAINER(sb.scroll), GTK_WIDGET(sb.view));
+
+ t->view = WEBKIT_WEB_VIEW (webkit_web_view_new ());
+ gtk_container_add(GTK_CONTAINER(t->scroll), GTK_WIDGET(t->view));
+
+ t->label = gtk_label_new("new tab");
+ int index = gtk_notebook_append_page(GTK_NOTEBOOK(w.notebook), t->scroll, t->label);
+ gtk_notebook_set_tab_reorderable(GTK_NOTEBOOK(w.notebook), t->scroll, TRUE);
+
+ if ( gtk_notebook_get_n_pages(GTK_NOTEBOOK(w.notebook)) == 1) { }
+ if (index == 0) {
+ gtk_notebook_set_show_tabs(GTK_NOTEBOOK(w.notebook), FALSE);
+ } else { gtk_notebook_set_show_tabs(GTK_NOTEBOOK(w.notebook), TRUE); }
+
/*callbacks*/
- g_signal_connect (G_OBJECT (sb.view), "title-changed", G_CALLBACK (title_change_cb), t->view);
- g_signal_connect (G_OBJECT (sb.view), "load-progress-changed", G_CALLBACK (progress_change_cb), t->view);
- g_signal_connect (G_OBJECT (sb.view), "load-committed", G_CALLBACK (load_commit_cb), t->view);
- g_signal_connect (G_OBJECT (sb.view), "hovering-over-link", G_CALLBACK (link_hover_cb), t->view);
+ g_signal_connect (G_OBJECT (t->view), "title-changed", G_CALLBACK (title_change_cb), t->view);
+ g_signal_connect (G_OBJECT (t->view), "load-progress-changed", G_CALLBACK (progress_change_cb), t->view);
+ g_signal_connect (G_OBJECT (t->view), "load-committed", G_CALLBACK (load_commit_cb), t->view);
+ g_signal_connect (G_OBJECT (t->view), "hovering-over-link", G_CALLBACK (link_hover_cb), t->view);
/*settings*/
- sb.settings = webkit_web_settings_new ();
- g_object_set (G_OBJECT(sb.settings), "enable-java-applet", FALSE, NULL);
- g_object_set (G_OBJECT(sb.settings), "print-backgrounds", FALSE, NULL);
- webkit_web_view_set_settings (WEBKIT_WEB_VIEW(sb.view), sb.settings);
- return t;
+ g_object_set_qdata_full(G_OBJECT(gtk_notebook_get_nth_page((GtkNotebook*)w.notebook, index)), term_data_id, t, NULL);
+
+ t->settings = webkit_web_settings_new ();
+ g_object_set (G_OBJECT(t->settings), "enable-java-applet", FALSE, NULL);
+ g_object_set (G_OBJECT(t->settings), "print-backgrounds", FALSE, NULL);
+ webkit_web_view_set_settings (WEBKIT_WEB_VIEW(t->view), t->settings);
}
-window *w new_window(void) {
-
+static void config() {
+ term_data_id = g_quark_from_static_string("mt");
/*sb is orginized with a vbox. much the simplest way to orginize things*/
- struct window *w;
- w = g_new0(window, struct);
-
- w->vbox = gtk_vbox_new(FALSE, 0);
+ w.vbox = gtk_vbox_new(FALSE, 0);
/*entry bar*/
- w->bar = gtk_entry_new ();
- gtk_entry_set_has_frame(GTK_ENTRY(w->bar), FALSE);
+ w.bar = gtk_entry_new ();
+ gtk_entry_set_has_frame(GTK_ENTRY(w.bar), FALSE);
- g_signal_connect (G_OBJECT (w->bar), "activate", G_CALLBACK (activate_uri_entry_cb), NULL);
- gtk_box_pack_start (GTK_BOX (w->vbox), w->bar, FALSE, FALSE, 0);
+ g_signal_connect (G_OBJECT (w.bar), "activate", G_CALLBACK (activate_uri_entry_cb), NULL);
+ gtk_box_pack_start (GTK_BOX (w.vbox), w.bar, FALSE, FALSE, 0);
/*notebook*/
- w->notebook = gtk_notebook_new();
- gtk_box_pack_start(GTK_BOX(w->vbox), w->notebook, FALSE, FALSE, 0);
+ w.notebook = gtk_notebook_new();
+ gtk_box_pack_start(GTK_BOX(w.vbox), w.notebook, FALSE, FALSE, 0);
/* status bar*/
- w->status = gtk_statusbar_new();
- gtk_box_pack_start(GTK_BOX(w->vbox), w->status, FALSE, FALSE, 0);
+ w.status = gtk_statusbar_new();
+ gtk_box_pack_start(GTK_BOX(w.vbox), w.status, FALSE, FALSE, 0);
-
- /* browser setup*/
-
- //gtk_box_pack_start (GTK_BOX (sb.vbox), GTK_WIDGET(sb.scroll), TRUE, TRUE, 0);
-
/*window initialization & callbacks*/
- w->win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- g_signal_connect (G_OBJECT (w->win), "destroy", G_CALLBACK (destroy_cb), NULL);
- g_signal_connect(w->win, "key-press-event", G_CALLBACK(key_press_cb), NULL);
+ w.win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ g_signal_connect (G_OBJECT (w.win), "destroy", G_CALLBACK (destroy_cb), NULL);
+ g_signal_connect(w.win, "key-press-event", G_CALLBACK(key_press_cb), NULL);
- gtk_container_add (GTK_CONTAINER (w->win), sb.vbox);
- gtk_window_set_default_size(GTK_WINDOW(w->win), 800, 800);
+ gtk_container_add (GTK_CONTAINER (w.win), w.vbox);
+ gtk_window_set_default_size(GTK_WINDOW(w.win), 800, 800);
/*open argument, or default page*/
- webkit_web_view_open (sb.view, uri);
- gtk_widget_grab_focus (GTK_WIDGET (sb.view));
- gtk_widget_show_all (sb.win);
- return w;
-
-};
+ //gtk_widget_grab_focus (GTK_WIDGET (w.view));
+ new_tab();
+ gtk_widget_show_all (w.win);
+}
gboolean key_press_cb (GtkWidget *widget, GdkEventKey *event) {
if (event->state == GDK_CONTROL_MASK) {
- if (gdk_keyval_to_lower(event->keyval) == GDK_f) { gtk_widget_grab_focus(GTK_WIDGET(sb.bar)); return TRUE; }
- if (gdk_keyval_to_lower(event->keyval) == GDK_l) { gtk_widget_grab_focus(GTK_WIDGET(sb.bar)); return TRUE; }
- if (gdk_keyval_to_lower(event->keyval) == GDK_j) { go_back_cb(NULL, NULL); return TRUE; }
- if (gdk_keyval_to_lower(event->keyval) == GDK_k) { go_forward_cb(NULL, NULL); return TRUE; }
- if (gdk_keyval_to_lower(event->keyval) == GDK_bracketright) { webkit_web_view_set_zoom_level(sb.view, (webkit_web_view_get_zoom_level(sb.view) + .05)); return TRUE; }
- if (gdk_keyval_to_lower(event->keyval) == GDK_bracketleft) { webkit_web_view_set_zoom_level(sb.view, (webkit_web_view_get_zoom_level(sb.view) - .05)); return TRUE; }
+ if (gdk_keyval_to_lower(event->keyval) == GDK_f) { gtk_widget_grab_focus(GTK_WIDGET(w.bar)); return TRUE; }
+ if (gdk_keyval_to_lower(event->keyval) == GDK_l) { gtk_widget_grab_focus(GTK_WIDGET(w.bar)); return TRUE; }
+ if (gdk_keyval_to_lower(event->keyval) == GDK_j) { go_cb(FALSE); return TRUE; }
+ if (gdk_keyval_to_lower(event->keyval) == GDK_k) { go_cb(TRUE); return TRUE; }
+ //if (gdk_keyval_to_lower(event->keyval) == GDK_bracketright) { webkit_web_view_set_zoom_level(t->view, (webkit_web_view_get_zoom_level(t->view) + .05)); return TRUE; }
+ //if (gdk_keyval_to_lower(event->keyval) == GDK_bracketleft) { webkit_web_view_set_zoom_level(t->view, (webkit_web_view_get_zoom_level(t->view) - .05)); return TRUE; }
else { return FALSE; }
}
- if (gtk_widget_has_focus(sb.bar) && gdk_keyval_to_lower(event->keyval) == GDK_Escape) { gtk_widget_grab_focus(GTK_WIDGET(sb.view)); return TRUE; }
+ if (gtk_widget_has_focus(w.bar) && gdk_keyval_to_lower(event->keyval) == GDK_Escape) { gtk_widget_grab_focus(GTK_WIDGET(w.notebook)); return TRUE; }
return FALSE;
}
@@ -156,8 +158,8 @@ if (event->state == GDK_CONTROL_MASK) {
int main (int argc, char* argv[]) {
gtk_init (&argc, &argv);
- struct window *w;
- w = new_window();
+
+ config();
//gchar* w->starting_uri = (gchar*) (argc > 1 ? argv[1] : "http://www.google.com/");
gtk_main();