int main(int argc, char **argv) { GError *error = NULL; unsigned long wid=0; gtk_init( &argc, &argv ); int i; for(i=0; i<argc; i++) { if(strcmp("-h", argv[i])==0 || strcmp("--help", argv[i])==0) { printHelp(); return 0; } else if(strcmp("-V", argv[i])==0 || strcmp("--version", argv[i])==0) { printf("gtk_preview version 1.0\n"); return 0; } else if(argc>1) sscanf(argv[1], "%ld", &wid); } const char* ui_file = DATA_DIR "/preview.ui"; GtkBuilder *builder = gtk_builder_new(); if( ! gtk_builder_add_from_file( builder, ui_file, &error ) ) { g_warning( "%s", error->message ); g_free( error ); return 1; } GtkWidget *previewUI = GTK_WIDGET( gtk_builder_get_object( builder, "frame1" ) ); gtk_builder_connect_signals( builder, NULL ); /* a plug when embedded, a window when a window */ GtkWidget* window; if(wid==0) { window = gtk_dialog_new(); gtk_container_add (GTK_CONTAINER (GTK_DIALOG (window)->vbox), previewUI); g_signal_connect(window, "response", G_CALLBACK(on_dlg_response), NULL); } else { window = gtk_plug_new(wid); gtk_container_add (GTK_CONTAINER (window), previewUI); } GdkColor black = {0, 0, 0, 0}; gtk_widget_modify_bg(previewUI, GTK_STATE_NORMAL, &black); g_signal_connect (window, "destroy", G_CALLBACK (gtk_widget_destroyed), &window); gtk_widget_show_all ( window ); g_object_unref( G_OBJECT( builder ) ); if(wid) fprintf(stderr, "--- is embedded: %d\n", gtk_plug_get_embedded(GTK_PLUG(window))); gchar** files = gtk_rc_get_default_files(); GFile* file = g_file_new_for_path(files[0]); GFileMonitor* monitor = g_file_monitor_file(file, G_FILE_MONITOR_NONE, NULL, NULL); g_signal_connect (monitor, "changed", G_CALLBACK (reloadstyle), NULL); gtk_main(); return 0; }
WebKitWebView * client_new(const gchar *uri) { struct Client *c; WebKitWebContext *wc; gchar *f; if (uri != NULL && cooperative_instances && !cooperative_alone) { write(cooperative_pipe_fp, uri, strlen(uri)); write(cooperative_pipe_fp, "\n", 1); return NULL; } c = malloc(sizeof(struct Client)); if (!c) { fprintf(stderr, __NAME__": fatal: malloc failed\n"); exit(EXIT_FAILURE); } c->hover_uri = NULL; c->win = NULL; if (embed != 0) { c->win = gtk_plug_new(embed); if (!gtk_plug_get_embedded(GTK_PLUG(c->win))) { fprintf(stderr, __NAME__": Can't plug-in to XID %ld.\n", embed); gtk_widget_destroy(c->win); c->win = NULL; embed = 0; } } if (c->win == NULL) { c->win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_wmclass(GTK_WINDOW(c->win), __NAME__, __NAME_CAPITALIZED__); } gtk_window_set_default_size(GTK_WINDOW(c->win), 800, 600); g_signal_connect(G_OBJECT(c->win), "destroy", G_CALLBACK(client_destroy), c); gtk_window_set_title(GTK_WINDOW(c->win), __NAME__); c->web_view = webkit_web_view_new(); wc = webkit_web_view_get_context(WEBKIT_WEB_VIEW(c->web_view)); webkit_web_view_set_zoom_level(WEBKIT_WEB_VIEW(c->web_view), global_zoom); g_signal_connect(G_OBJECT(c->web_view), "notify::title", G_CALLBACK(changed_title), c); g_signal_connect(G_OBJECT(c->web_view), "notify::uri", G_CALLBACK(changed_uri), c); g_signal_connect(G_OBJECT(c->web_view), "notify::estimated-load-progress", G_CALLBACK(changed_load_progress), c); g_signal_connect(G_OBJECT(c->web_view), "create", G_CALLBACK(client_new_request), NULL); g_signal_connect(G_OBJECT(c->web_view), "close", G_CALLBACK(client_destroy_request), c); g_signal_connect(G_OBJECT(c->web_view), "decide-policy", G_CALLBACK(decide_policy), NULL); g_signal_connect(G_OBJECT(c->web_view), "key-press-event", G_CALLBACK(key_web_view), c); g_signal_connect(G_OBJECT(c->web_view), "button-press-event", G_CALLBACK(key_web_view), c); g_signal_connect(G_OBJECT(c->web_view), "scroll-event", G_CALLBACK(key_web_view), c); g_signal_connect(G_OBJECT(c->web_view), "mouse-target-changed", G_CALLBACK(hover_web_view), c); g_signal_connect(G_OBJECT(c->web_view), "web-process-crashed", G_CALLBACK(crashed_web_view), c); if (!initial_wc_setup_done) { if (accepted_language[0] != NULL) webkit_web_context_set_preferred_languages(wc, accepted_language); g_signal_connect(G_OBJECT(wc), "download-started", G_CALLBACK(download_handle_start), NULL); trust_user_certs(wc); initial_wc_setup_done = TRUE; } if (user_agent != NULL) g_object_set(G_OBJECT(webkit_web_view_get_settings(WEBKIT_WEB_VIEW(c->web_view))), "user-agent", user_agent, NULL); c->location = gtk_entry_new(); g_signal_connect(G_OBJECT(c->location), "key-press-event", G_CALLBACK(key_location), c); /* XXX Progress bars don't work/look as intended anymore. Level bars * are a dirty workaround (kind of). */ c->progress = gtk_level_bar_new(); gtk_level_bar_set_value(GTK_LEVEL_BAR(c->progress), 0); gtk_widget_set_size_request(c->progress, 100, -1); c->top_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start(GTK_BOX(c->top_box), c->location, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(c->top_box), c->progress, FALSE, FALSE, 0); c->vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_start(GTK_BOX(c->vbox), c->top_box, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(c->vbox), c->web_view, TRUE, TRUE, 0); gtk_container_add(GTK_CONTAINER(c->win), c->vbox); gtk_widget_grab_focus(c->web_view); gtk_widget_show_all(c->win); if (uri != NULL) { f = ensure_uri_scheme(uri); webkit_web_view_load_uri(WEBKIT_WEB_VIEW(c->web_view), f); g_free(f); } clients++; return WEBKIT_WEB_VIEW(c->web_view); }