⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 callback.cpp

📁 JDesktop Integration Components (JDIC)
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is mozilla.org code. * * The Initial Developer of the Original Code is Christopher Blizzard. * * Portions created by the Initial Developer are Copyright (C) 2001 * the Initial Developer. All Rights Reserved. * * Contributor(s): *   Christopher Blizzard <blizzard@mozilla.org> * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */#include "Common.h"#include "Message.h"#include "MozEmbed.h"#include "MsgServer.h"#include "Util.h"#include "xembed.h"// from the Gecko SDK#include "prthread.h"#include "nsIInterfaceRequestorUtils.h"#include "nsIURI.h"#include "nsIWebBrowser.h"#include "nsIWebBrowserFocus.h"#include "nsEmbedString.h"// copied from Mozilla 1.7#include "gtkmozembed_internal.h"#include "nsIWebNavigation.h"extern int gTestMode;voidinstall_mozembed_cb(GtkBrowser *browser){    // hook up the location change to update the urlEntry    gtk_signal_connect(GTK_OBJECT(browser->mozEmbed), "location",        GTK_SIGNAL_FUNC(location_changed_cb), browser);    // hook up the start and stop signals    gtk_signal_connect(GTK_OBJECT(browser->mozEmbed), "net_start",        GTK_SIGNAL_FUNC(load_started_cb), browser);    gtk_signal_connect(GTK_OBJECT(browser->mozEmbed), "net_stop",        GTK_SIGNAL_FUNC(load_finished_cb), browser);    // hook up to the change in network status    gtk_signal_connect(GTK_OBJECT(browser->mozEmbed), "net_state",        GTK_SIGNAL_FUNC(net_state_change_cb), browser);    gtk_signal_connect(GTK_OBJECT(browser->mozEmbed), "net_state_all",        GTK_SIGNAL_FUNC(net_state_change_all_cb), browser);    // hookup to changes in progress    gtk_signal_connect(GTK_OBJECT(browser->mozEmbed), "progress",        GTK_SIGNAL_FUNC(progress_change_cb), browser);    gtk_signal_connect(GTK_OBJECT(browser->mozEmbed), "progress_all",        GTK_SIGNAL_FUNC(progress_change_all_cb), browser);    // hookup to see whenever a new window is requested    gtk_signal_connect(GTK_OBJECT(browser->mozEmbed), "new_window",        GTK_SIGNAL_FUNC(new_window_cb), browser);    // hookup to any requested visibility changes    gtk_signal_connect(GTK_OBJECT(browser->mozEmbed), "visibility",        GTK_SIGNAL_FUNC(visibility_cb), browser);    // hookup to the signal that says that the browser requested to be    // destroyed    gtk_signal_connect(GTK_OBJECT(browser->mozEmbed), "destroy_browser",        GTK_SIGNAL_FUNC(destroy_brsr_cb), browser);    // hookup to the signal that is called when someone clicks on a link    // to load a new uri    gtk_signal_connect(GTK_OBJECT(browser->mozEmbed), "open_uri",        GTK_SIGNAL_FUNC(open_uri_cb), browser);    // this signal is emitted when there's a request to change the    // containing browser window to a certain height, like with width    // and height args for a window.open in javascript    gtk_signal_connect(GTK_OBJECT(browser->mozEmbed), "size_to",        GTK_SIGNAL_FUNC(size_to_cb), browser);    // hookup to when the window is destroyed    gtk_signal_connect(GTK_OBJECT(browser->mozEmbed), "destroy",        GTK_SIGNAL_FUNC(destroy_cb), browser);    // title and status text change	gtk_signal_connect(GTK_OBJECT(browser->mozEmbed), "title",        GTK_SIGNAL_FUNC(title_change_cb), browser);    gtk_signal_connect(GTK_OBJECT(browser->mozEmbed), "status_change",        GTK_SIGNAL_FUNC(status_text_change_cb), browser);}voidback_clicked_cb(GtkButton *button, GtkBrowser *browser){    gtk_moz_embed_go_back(GTK_MOZ_EMBED(browser->mozEmbed));}voidstop_clicked_cb(GtkButton *button, GtkBrowser *browser){    gtk_moz_embed_stop_load(GTK_MOZ_EMBED(browser->mozEmbed));}voidforward_clicked_cb(GtkButton *button, GtkBrowser *browser){    gtk_moz_embed_go_forward(GTK_MOZ_EMBED(browser->mozEmbed));}voidreload_clicked_cb(GtkButton *button, GtkBrowser *browser){    GdkModifierType state = (GdkModifierType)0;    gint x, y;    gdk_window_get_pointer(NULL, &x, &y, &state);    gtk_moz_embed_reload(GTK_MOZ_EMBED(browser->mozEmbed),        (state & GDK_SHIFT_MASK) ?        GTK_MOZ_EMBED_FLAG_RELOADBYPASSCACHE :        GTK_MOZ_EMBED_FLAG_RELOADNORMAL);}voidstream_clicked_cb(GtkButton   *button, GtkBrowser *browser){    const char *data;    const char *data2;    data = "<html>Hi";    data2 = " there</html>\n";    WBTRACE("stream_clicked_cb\n");    gtk_moz_embed_open_stream(GTK_MOZ_EMBED(browser->mozEmbed),        "file://", "text/html");    gtk_moz_embed_append_data(GTK_MOZ_EMBED(browser->mozEmbed),        data, strlen(data));    gtk_moz_embed_append_data(GTK_MOZ_EMBED(browser->mozEmbed),        data2, strlen(data2));    gtk_moz_embed_close_stream(GTK_MOZ_EMBED(browser->mozEmbed));}voidurl_activate_cb(GtkEditable *widget, GtkBrowser *browser){    gchar *text = gtk_editable_get_chars(widget, 0, -1);    WBTRACE("loading url %s\n", text);    gtk_moz_embed_load_url(GTK_MOZ_EMBED(browser->mozEmbed), text);    g_free(text);}voidmenu_close_cb(GtkMenuItem *menuitem, GtkBrowser *browser){    gtk_widget_destroy(browser->topLevelWindow);}gbooleandelete_cb(GtkWidget *widget, GdkEventAny *event, GtkBrowser *browser){    WBTRACE("delete_cb\n");    gtk_widget_destroy(widget);    return TRUE;}void set_focus_cb(GtkWindow *window, GtkWidget *focus, GtkBrowser *browser){  WBTRACE("focus_event_cb\n");  #ifdef MOZ_WIDGET_GTK    if (focus && !window->window_has_focus)  #endif  #ifdef MOZ_WIDGET_GTK2    if (focus && !window->has_focus)  #endif    SendSocketMessage(browser->id, CEVENT_FOCUS_REQUEST);} voiddestroy_cb(GtkWidget *widget, GtkBrowser *browser){    WBTRACE("destroy_cb\n");    int count = 0, size = gBrowserArray.GetSize();    for (int i = size - 1; i >= 0; i--) {        GtkBrowser *tmpBrowser = (GtkBrowser *)gBrowserArray[i];        if (tmpBrowser == browser)            gBrowserArray.RemoveAt(i);        else if (tmpBrowser)            count++;    }    if (browser->tempMessage)        g_free(browser->tempMessage);    if (gTestMode && count == 0)        gtk_main_quit();}voidlocation_changed_cb(GtkMozEmbed *embed, GtkBrowser *browser){    char *newLocation;    int   newPosition = 0;    WBTRACE("location_changed_cb\n");    newLocation = gtk_moz_embed_get_location(embed);    if (newLocation) {        if (browser->urlEntry) {            gtk_editable_delete_text(GTK_EDITABLE(browser->urlEntry), 0, -1);            gtk_editable_insert_text(GTK_EDITABLE(browser->urlEntry),                newLocation, strlen(newLocation), &newPosition);        }        g_free(newLocation);    }    else        WBTRACE("failed to get location!\n");    // always make sure to clear the tempMessage.  it might have been    // set from the link before a click and we wouldn't have gotten the    // callback to unset it.    update_temp_message(browser, 0);    // update the nav buttons on a location change    update_nav_buttons(browser);}voidload_started_cb(GtkMozEmbed *embed, GtkBrowser *browser){    if (browser->stopButton)        gtk_widget_set_sensitive(browser->stopButton, TRUE);    if (browser->reloadButton)        gtk_widget_set_sensitive(browser->reloadButton, FALSE);    browser->loadPercent = 0;    browser->bytesLoaded = 0;    browser->maxBytesLoaded = 0;    update_status_bar_text(browser);    SendSocketMessage(browser->id, CEVENT_DOWNLOAD_STARTED);}voidload_finished_cb(GtkMozEmbed *embed, GtkBrowser *browser){    if (browser->stopButton)        gtk_widget_set_sensitive(browser->stopButton, FALSE);    if (browser->reloadButton)        gtk_widget_set_sensitive(browser->reloadButton, TRUE);    browser->loadPercent = 0;    browser->bytesLoaded = 0;    browser->maxBytesLoaded = 0;    update_status_bar_text(browser);    if (browser->progressBar)        gtk_progress_set_percentage(GTK_PROGRESS(browser->progressBar), 0);    // hacking, force to set focus to mozarea(gtk1.2)/gtkplug(gtk2) so that the keyboard event    // can be propagated into our event handler.#ifdef MOZ_WIDGET_GTK    GtkWidget *mozarea = GTK_BIN(browser->mozEmbed)->child;    GTK_WIDGET_SET_FLAGS(mozarea, GTK_HAS_FOCUS);#endif#ifdef MOZ_WIDGET_GTK2    GtkPlug *plug = GTK_PLUG(browser->topLevelWindow);    GdkNativeWindow plugId = gtk_plug_get_id(plug);    GdkWindow *recipient = GDK_WINDOW(GTK_WIDGET(plug)->window);    GdkDisplay *display = gdk_drawable_get_display(recipient);    XEvent xevent;      xevent.xclient.window = plugId;    xevent.xclient.type = ClientMessage;    xevent.xclient.message_type = gdk_x11_get_xatom_by_name_for_display (display, "_XEMBED");    xevent.xclient.format = 32;    xevent.xclient.data.l[0] = gtk_get_current_event_time ();    xevent.xclient.data.l[1] = XEMBED_WINDOW_ACTIVATE;    xevent.xclient.data.l[2] = 0;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -