/** * event handler for when a completion suggestion is selected. */ static gboolean nsgtk_completion_match_select(GtkEntryCompletion *widget, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data) { GValue value = {0, }; struct nsgtk_scaffolding *g = user_data; struct browser_window *bw = nsgtk_get_browser_window(nsgtk_scaffolding_top_level(g)); nserror ret; nsurl *url; gtk_tree_model_get_value(model, iter, 0, &value); ret = search_web_omni(g_value_get_string(&value), SEARCH_WEB_OMNI_NONE, &url); g_value_unset(&value); if (ret == NSERROR_OK) { ret = browser_window_navigate(bw, url, NULL, BW_NAVIGATE_HISTORY, NULL, NULL, NULL); nsurl_unref(url); } if (ret != NSERROR_OK) { nsgtk_warning(messages_get_errorcode(ret), 0); } return TRUE; }
gboolean nsgtk_websearch_activate(GtkWidget *widget, gpointer data) { struct nsgtk_scaffolding *g = data; nserror ret; nsurl *url; ret = search_web_omni( gtk_entry_get_text(GTK_ENTRY(nsgtk_scaffolding_websearch(g))), SEARCH_WEB_OMNI_SEARCHONLY, &url); if (ret == NSERROR_OK) { temp_open_background = 0; ret = browser_window_create( BW_CREATE_HISTORY | BW_CREATE_TAB, url, NULL, nsgtk_get_browser_window(nsgtk_scaffolding_top_level(g)), NULL); temp_open_background = -1; nsurl_unref(url); } if (ret != NSERROR_OK) { nsgtk_warning(messages_get_errorcode(ret), 0); } return TRUE; }
static nserror gui_launch_url(struct nsurl *url) { gboolean ok; GError *error = NULL; ok = nsgtk_show_uri(NULL, nsurl_access(url), GDK_CURRENT_TIME, &error); if (ok == TRUE) { return NSERROR_OK; } if (error) { nsgtk_warning(messages_get("URIOpenError"), error->message); g_error_free(error); } return NSERROR_NO_FETCH_HANDLER; }
static gchar* nsgtk_download_dialog_show (const gchar *filename, const gchar *domain, const gchar *size) { enum { GTK_RESPONSE_DOWNLOAD, GTK_RESPONSE_SAVE_AS }; GtkWidget *dialog; char *destination = NULL; gchar *message = g_strdup(messages_get("gtkStartDownload")); gchar *info = g_strdup_printf(messages_get("gtkInfo"), filename, domain, size); dialog = gtk_message_dialog_new_with_markup(nsgtk_download_parent, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE, "<span size=\"x-large\" weight=\"ultrabold\">%s</span>" "\n\n<small>%s</small>", message, info); gtk_dialog_add_buttons(GTK_DIALOG(dialog), NSGTK_STOCK_SAVE, GTK_RESPONSE_DOWNLOAD, NSGTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NSGTK_STOCK_SAVE_AS, GTK_RESPONSE_SAVE_AS, NULL); gint result = gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); g_free(message); g_free(info); switch (result) { case GTK_RESPONSE_SAVE_AS: { dialog = gtk_file_chooser_dialog_new (messages_get("gtkSave"), nsgtk_download_parent, GTK_FILE_CHOOSER_ACTION_SAVE, NSGTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NSGTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER(dialog), filename); gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(dialog), nsoption_charp(downloads_directory)); gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER(dialog), nsoption_bool(request_overwrite)); gint result = gtk_dialog_run(GTK_DIALOG(dialog)); if (result == GTK_RESPONSE_ACCEPT) destination = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(dialog)); gtk_widget_destroy(dialog); break; } case GTK_RESPONSE_DOWNLOAD: { destination = malloc(strlen(nsoption_charp(downloads_directory)) + strlen(filename) + SLEN("/") + 1); if (destination == NULL) { nsgtk_warning(messages_get("NoMemory"), 0); break; } sprintf(destination, "%s/%s", nsoption_charp(downloads_directory), filename); /* Test if file already exists and display overwrite * confirmation if needed */ if (g_file_test(destination, G_FILE_TEST_EXISTS) && nsoption_bool(request_overwrite)) { message = g_strdup_printf(messages_get( "gtkOverwrite"), filename); info = g_strdup_printf(messages_get( "gtkOverwriteInfo"), nsoption_charp(downloads_directory)); dialog = gtk_message_dialog_new_with_markup( nsgtk_download_parent, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_CANCEL, "<b>%s</b>",message); gtk_message_dialog_format_secondary_markup( GTK_MESSAGE_DIALOG(dialog), "%s", info); GtkWidget *button = gtk_dialog_add_button( GTK_DIALOG(dialog), "_Replace", GTK_RESPONSE_DOWNLOAD); gtk_button_set_image(GTK_BUTTON(button), nsgtk_image_new_from_stock( NSGTK_STOCK_SAVE, GTK_ICON_SIZE_BUTTON)); gint result = gtk_dialog_run(GTK_DIALOG(dialog)); if (result == GTK_RESPONSE_CANCEL) destination = NULL; gtk_widget_destroy(dialog); g_free(message); g_free(info); } break; } } return destination; }
struct nsgtk_treeview * nsgtk_treeview_create(unsigned int flags, GtkWindow *window, GtkScrolledWindow *scrolled, GtkDrawingArea *drawing_area, struct sslcert_session_data *ssl_data) { struct nsgtk_treeview *tv; assert(drawing_area != NULL); tv = malloc(sizeof(struct nsgtk_treeview)); if (tv == NULL) { LOG("malloc failed"); nsgtk_warning("NoMemory", 0); return NULL; } tv->tree_flags = flags; if (tv->tree_flags == TREE_SSLCERT) { tv->ssl_data = ssl_data; ssl_current_session = tv->ssl_data; } tv->window = window; tv->scrolled = scrolled; tv->drawing_area = drawing_area; tv->input_method = gtk_im_multicontext_new(); tv->tree = tree_create(flags, &nsgtk_tree_callbacks, tv); tv->mouse_state = 0; tv->mouse_pressed = false; nsgtk_widget_override_background_color(GTK_WIDGET(drawing_area), GTK_STATE_NORMAL, 0, 0xffff, 0xffff, 0xffff); nsgtk_connect_draw_event(GTK_WIDGET(drawing_area), G_CALLBACK(nsgtk_tree_window_draw_event), tv); #define CONNECT(obj, sig, callback, ptr) \ g_signal_connect(G_OBJECT(obj), (sig), G_CALLBACK(callback), (ptr)) CONNECT(drawing_area, "button-press-event", nsgtk_tree_window_button_press_event, tv); CONNECT(drawing_area, "button-release-event", nsgtk_tree_window_button_release_event, tv); CONNECT(drawing_area, "motion-notify-event", nsgtk_tree_window_motion_notify_event, tv); CONNECT(drawing_area, "key-press-event", nsgtk_tree_window_keypress_event, tv); CONNECT(drawing_area, "key-release-event", nsgtk_tree_window_keyrelease_event, tv); /* input method */ gtk_im_context_set_client_window(tv->input_method, nsgtk_widget_get_window(GTK_WIDGET(tv->window))); gtk_im_context_set_use_preedit(tv->input_method, FALSE); /* input method signals */ CONNECT(tv->input_method, "commit", nsgtk_tree_window_input_method_commit, tv); return tv; }