void tabs_init() { char *tab_label_menu = _("Menu"); char *tab_label_contacts = _("Contacts"); char *tab_label_broadcast = _("Global"); struct tab *t; struct view *v; t = tab_new("Log"); v = view_init("log"); tab_push_view(t, v); view_log_print(VLT_INFO, "Begin logging..."); t = tab_new(tab_label_menu); v = view_init("menu"); tab_push_view(t, v); tab_show(t); t = tab_new(tab_label_contacts); v = view_init("contacts"); tab_push_view(t, v); t = tab_new(tab_label_broadcast); v = view_init("chat"); view_chat_set_contact(v, NULL); tab_push_view(t, v); }
/* setup the main window */ static void new_window() { window *w = g_new0(window, 1); term_data_id = g_quark_from_static_string("svte"); w->notebook = gtk_notebook_new(); gtk_notebook_set_show_border(GTK_NOTEBOOK(w->notebook), FALSE); gtk_notebook_set_scrollable(GTK_NOTEBOOK(w->notebook), TRUE); w->win = gtk_window_new(GTK_WINDOW_TOPLEVEL); if (config->fullscreen) { gtk_window_fullscreen(GTK_WINDOW(w->win)); } gtk_window_set_default_size(GTK_WINDOW(w->win), config->window_width, config->window_height); gtk_container_add(GTK_CONTAINER(w->win), w->notebook); tab_new(w); gtk_widget_show_all(w->win); /* add the callback signals */ g_signal_connect(G_OBJECT(w->win), "key-press-event", G_CALLBACK(event_key), w); g_signal_connect(G_OBJECT(w->notebook), "switch-page", G_CALLBACK(tab_focus), w); g_signal_connect(G_OBJECT(w->win), "destroy", G_CALLBACK(window_destroy), w); set_window_title(get_current_term(w)); }
/* main entry-point */ int main(int argc, char *argv[]) { gboolean version = FALSE; gboolean fullscreen = FALSE; char *geometry = NULL; char **uris = NULL; GError *error = NULL; GOptionEntry entries[] = { { "version", 'v', 0, G_OPTION_ARG_NONE, &version, "Print version number", NULL }, { "fullscreen", 0, 0, G_OPTION_ARG_NONE, &fullscreen, "Fullscreen mode", NULL }, { "geometry", 'g', 0, G_OPTION_ARG_STRING, &geometry, "X geometry specification", "GEOMETRY" }, { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_STRING_ARRAY, &uris, "Addresses", NULL }, { NULL } }; /* initialize GTK and parse commandline options */ if (!gtk_init_with_args(&argc, &argv, "[addresses]", entries, NULL, &error)) { die("%s\n", error->message); } if (version) { printf("hydra %s, 2014 David Luco\n", VERSION); exit(EXIT_SUCCESS); } /* create top level Hydra struct */ hydra = g_new0(Hydra, 1); /* create first browser and add to browsers list */ Browser *b = browser_new(); hydra->browsers = g_list_append(hydra->browsers, b); if (fullscreen) { gtk_window_fullscreen(GTK_WINDOW(b->window)); } if (uris) { /* load first uri in first tab (already created) */ tab_load_uri(browser_get_current_tab(b), *uris++); /* load other uris (if any) in new tabs */ while (uris && *uris) { tab_load_uri(tab_new(b, "Loading..."), *uris++); } } else { /* load homepage on startup */ tab_load_uri(browser_get_current_tab(b), DEFAULT_HOME); } gtk_main(); return 0; }
/* key event handler */ gboolean event_key(GtkWidget *widget, GdkEventKey *event, window *w) { guint(g) = event->keyval; if ((event->state & (GDK_CONTROL_MASK|GDK_SHIFT_MASK)) == (GDK_CONTROL_MASK|GDK_SHIFT_MASK)) { if (g == GDK_N) { new_window(); return TRUE; } if (g == GDK_T) { tab_new(w); return TRUE; } if (g == GDK_H) { tab_togglebar(w); return TRUE; } if (g == GDK_W) { tab_close(NULL, w); return TRUE; } if (g == GDK_V) { vte_terminal_paste_clipboard(VTE_TERMINAL(get_current_term(w)->vte)); return TRUE; } if (g == GDK_C) { vte_terminal_copy_clipboard(VTE_TERMINAL(get_current_term(w)->vte)); return TRUE; } } if ((event->state & (GDK_MOD1_MASK) ) == (GDK_MOD1_MASK)) { if (g == GDK_Left) { tab_switch(FALSE, w); return TRUE; } if (g == GDK_Right) { tab_switch(TRUE, w); return TRUE; } if (g == GDK_F11) { if(config->fullscreen) { gtk_window_unfullscreen(GTK_WINDOW(widget)); config->fullscreen = FALSE; } else { gtk_window_fullscreen(GTK_WINDOW(widget)); config->fullscreen = TRUE; } return TRUE; } } return FALSE; }
static int view_contacts_key_enter(int k) { struct view *v; struct tab *t; v = view_chat_find_by_contact(view_contacts_contact_current->c_key); if (v == NULL) { t = tab_new(view_contacts_contact_current->c_nickname); v = view_init("chat"); view_chat_set_contact(v, view_contacts_contact_current->c_key); tab_push_view(t, v); tab_show(t); } else { tab_show(v->v_tab); } chat_connect(view_contacts_contact_current); return CONTROLLERS_STOP; }