diff options
author | Elliott Sales de Andrade <qulogic@pidgin.im> | 2012-07-23 04:09:46 -0400 |
---|---|---|
committer | Elliott Sales de Andrade <qulogic@pidgin.im> | 2012-07-23 04:09:46 -0400 |
commit | a6b1e1da588466a92f681367af4245a27604b6aa (patch) | |
tree | da6fea8e8d10fc653c74403e1c754fd7cfd1e9c2 | |
parent | b32dd308a13ae959e3d6f0436e458aeb60cd3b9a (diff) | |
parent | e2d64dfd8d947da00f7d99ba2527780b450ce930 (diff) | |
download | pidgin-a6b1e1da588466a92f681367af4245a27604b6aa.tar.gz |
Merge with mainline.
-rw-r--r-- | pidgin/gtkblist.c | 3 | ||||
-rw-r--r-- | pidgin/gtkblist.h | 2 | ||||
-rw-r--r-- | pidgin/gtkdebug.c | 14 | ||||
-rw-r--r-- | pidgin/gtkdialogs.h | 3 | ||||
-rw-r--r-- | pidgin/gtkmenutray.c | 11 | ||||
-rw-r--r-- | pidgin/gtkwebview.c | 39 | ||||
-rw-r--r-- | pidgin/gtkwhiteboard.c | 43 | ||||
-rw-r--r-- | pidgin/gtkwhiteboard.h | 21 |
8 files changed, 84 insertions, 52 deletions
diff --git a/pidgin/gtkblist.c b/pidgin/gtkblist.c index c2c201698a..e953eb4488 100644 --- a/pidgin/gtkblist.c +++ b/pidgin/gtkblist.c @@ -125,6 +125,9 @@ typedef struct #define PIDGIN_BUDDY_LIST_GET_PRIVATE(list) \ ((PidginBuddyListPrivate *)((list)->priv)) +#define PIDGIN_WINDOW_ICONIFIED(x) \ + (gdk_window_get_state(gtk_widget_get_window(GTK_WIDGET(x))) & GDK_WINDOW_STATE_ICONIFIED) + static GtkWidget *accountmenu = NULL; static guint visibility_manager_count = 0; diff --git a/pidgin/gtkblist.h b/pidgin/gtkblist.h index e663564eda..209f45a1d2 100644 --- a/pidgin/gtkblist.h +++ b/pidgin/gtkblist.h @@ -104,7 +104,7 @@ struct _PidginBuddyList { PurpleBlistNode *selected_node; /**< The currently selected node */ GtkWidget *scrollbook; /**< Scrollbook for alerts */ - GtkWidget *headline; /**< Hbox for headline notification */ + GtkWidget *headline; /**< Widget for headline notifications */ GtkWidget *headline_label; /**< Label for headline notifications */ GtkWidget *headline_image; /**< Image for headline notifications */ GCallback headline_callback; /**< Callback for headline notifications */ diff --git a/pidgin/gtkdebug.c b/pidgin/gtkdebug.c index a5f8dd99c5..d668c98519 100644 --- a/pidgin/gtkdebug.c +++ b/pidgin/gtkdebug.c @@ -74,7 +74,7 @@ typedef struct /* Regex */ \ "div.hide{display:none;}" \ "span.regex{background-color:#ffafaf;font-weight:bold;}" \ - "</style></head></html>" + "</style></head><body class=l%d></body></html>" static DebugWindow *debug_win = NULL; static guint debug_enabled_timer = 0; @@ -148,7 +148,13 @@ save_cb(GtkWidget *w, DebugWindow *win) static void clear_cb(GtkWidget *w, DebugWindow *win) { - gtk_webview_load_html_string(GTK_WEBVIEW(win->text), EMPTY_HTML); + char *tmp; + int level; + + level = purple_prefs_get_int(PIDGIN_PREFS_ROOT "/debug/filterlevel"); + tmp = g_strdup_printf(EMPTY_HTML, level); + gtk_webview_load_html_string(GTK_WEBVIEW(win->text), tmp); + g_free(tmp); } static void @@ -611,7 +617,7 @@ toolbar_context(GtkWidget *toolbar, GdkEventButton *event, gpointer null) gtk_widget_show_all(menu); - gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 0, gtk_get_current_event_time()); + gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 3, event->time); return FALSE; } @@ -805,7 +811,7 @@ debug_window_new(void) gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0); gtk_widget_show(frame); - gtk_webview_load_html_string(GTK_WEBVIEW(win->text), EMPTY_HTML); + clear_cb(NULL, win); gtk_widget_show_all(win->window); diff --git a/pidgin/gtkdialogs.h b/pidgin/gtkdialogs.h index 01932c6dec..b1ee93ca3a 100644 --- a/pidgin/gtkdialogs.h +++ b/pidgin/gtkdialogs.h @@ -52,9 +52,6 @@ void pidgin_dialogs_remove_chat(PurpleChat *); void pidgin_dialogs_remove_contact(PurpleContact *); void pidgin_dialogs_merge_groups(PurpleGroup *, const char *); -/* This macro should probably be moved elsewhere */ -#define PIDGIN_WINDOW_ICONIFIED(x) (gdk_window_get_state(gtk_widget_get_window(GTK_WIDGET(x))) & GDK_WINDOW_STATE_ICONIFIED) - G_END_DECLS #endif /* _PIDGINDIALOGS_H_ */ diff --git a/pidgin/gtkmenutray.c b/pidgin/gtkmenutray.c index 604535d415..3fa8af1f2e 100644 --- a/pidgin/gtkmenutray.c +++ b/pidgin/gtkmenutray.c @@ -93,6 +93,8 @@ static void pidgin_menu_tray_finalize(GObject *obj) { #if 0 + PidginMenuTray *tray = PIDGIN_MENU_TRAY(obj); + /* This _might_ be leaking, but I have a sneaking suspicion that the widget is * getting destroyed in GtkContainer's finalize function. But if were are * leaking here, be sure to figure out why this causes a crash. @@ -233,11 +235,6 @@ pidgin_menu_tray_prepend(PidginMenuTray *menu_tray, GtkWidget *widget, const cha void pidgin_menu_tray_set_tooltip(PidginMenuTray *menu_tray, GtkWidget *widget, const char *tooltip) { -#if !GTK_CHECK_VERSION(2,12,0) - if (!menu_tray->tooltips) - menu_tray->tooltips = gtk_tooltips_new(); -#endif - /* Should we check whether widget is a child of menu_tray? */ /* @@ -250,10 +247,6 @@ pidgin_menu_tray_set_tooltip(PidginMenuTray *menu_tray, GtkWidget *widget, const if (!gtk_widget_get_has_window(widget)) widget = gtk_widget_get_parent(widget); -#if GTK_CHECK_VERSION(2,12,0) gtk_widget_set_tooltip_text(widget, tooltip); -#else - gtk_tooltips_set_tip(menu_tray->tooltips, widget, tooltip, NULL); -#endif } diff --git a/pidgin/gtkwebview.c b/pidgin/gtkwebview.c index 471ed76428..a6e91de53f 100644 --- a/pidgin/gtkwebview.c +++ b/pidgin/gtkwebview.c @@ -55,7 +55,8 @@ static guint signals[LAST_SIGNAL] = { 0 }; typedef struct _GtkWebViewPriv { gboolean empty; /**< whether anything has been appended **/ - /* JS execute queue */ + /* Processing queues */ + GQueue *html_queue; GQueue *js_queue; gboolean is_loading; @@ -141,6 +142,29 @@ process_js_script_queue(GtkWebView *webview) return TRUE; /* there may be more for now */ } +static gboolean +process_html_queue(GtkWebView *webview) +{ + GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview); + char *html; + WebKitDOMDocument *doc; + WebKitDOMHTMLElement *body; + + if (priv->is_loading) + return FALSE; + if (!priv->html_queue || g_queue_is_empty(priv->html_queue)) + return FALSE; + + html = g_queue_pop_head(priv->html_queue); + doc = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview)); + body = webkit_dom_document_get_body(doc); + webkit_dom_html_element_insert_adjacent_html(body, "beforeend", html, NULL); + g_free(html); + priv->empty = FALSE; + + return TRUE; +} + static void webview_load_started(WebKitWebView *webview, WebKitWebFrame *frame, gpointer userdata) @@ -375,6 +399,10 @@ gtk_webview_finalize(GObject *webview) GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview); gpointer temp; + while ((temp = g_queue_pop_head(priv->html_queue))) + g_free(temp); + g_queue_free(priv->html_queue); + while ((temp = g_queue_pop_head(priv->js_queue))) g_free(temp); g_queue_free(priv->js_queue); @@ -460,6 +488,7 @@ gtk_webview_init(GtkWebView *webview, gpointer userdata) GtkWebViewPriv *priv = GTK_WEBVIEW_GET_PRIVATE(webview); priv->empty = TRUE; + priv->html_queue = g_queue_new(); priv->js_queue = g_queue_new(); g_signal_connect(webview, "navigation-policy-decision-requested", @@ -587,16 +616,12 @@ void gtk_webview_append_html(GtkWebView *webview, const char *html) { GtkWebViewPriv *priv; - WebKitDOMDocument *doc; - WebKitDOMHTMLElement *body; g_return_if_fail(webview != NULL); priv = GTK_WEBVIEW_GET_PRIVATE(webview); - doc = webkit_web_view_get_dom_document(WEBKIT_WEB_VIEW(webview)); - body = webkit_dom_document_get_body(doc); - webkit_dom_html_element_insert_adjacent_html(body, "beforeend", html, NULL); - priv->empty = FALSE; + g_queue_push_tail(priv->html_queue, g_strdup(html)); + g_idle_add((GSourceFunc)process_html_queue, webview); } void diff --git a/pidgin/gtkwhiteboard.c b/pidgin/gtkwhiteboard.c index 1abcc1d93c..1ef9a8e230 100644 --- a/pidgin/gtkwhiteboard.c +++ b/pidgin/gtkwhiteboard.c @@ -28,6 +28,11 @@ #include "gtkwhiteboard.h" #include "gtkutils.h" +struct _PidginWhiteboardPrivate { + GdkPixbuf *pixbuf; + cairo_t *cr; +}; + /****************************************************************************** * Prototypes *****************************************************************************/ @@ -123,6 +128,7 @@ static void pidgin_whiteboard_create(PurpleWhiteboard *wb) GtkWidget *color_button; PidginWhiteboard *gtkwb = g_new0(PidginWhiteboard, 1); + gtkwb->priv = g_new0(PidginWhiteboardPrivate, 1); gtkwb->wb = wb; purple_whiteboard_set_ui_data(wb, gtkwb); @@ -280,13 +286,11 @@ static void pidgin_whiteboard_destroy(PurpleWhiteboard *wb) /* TODO Ask if user wants to save picture before the session is closed */ /* Clear graphical memory */ - if(gtkwb->pixbuf) - { - cairo_t *cr = g_object_get_data(G_OBJECT(gtkwb->pixbuf), "cairo-context"); + if (gtkwb->priv->pixbuf) { + cairo_t *cr = gtkwb->priv->cr; if (cr) cairo_destroy(cr); - g_object_unref(gtkwb->pixbuf); - gtkwb->pixbuf = NULL; + g_object_unref(gtkwb->priv->pixbuf); } colour_dialog = g_object_get_data(G_OBJECT(gtkwb->window), "colour-dialog"); @@ -300,6 +304,8 @@ static void pidgin_whiteboard_destroy(PurpleWhiteboard *wb) gtk_widget_destroy(gtkwb->window); gtkwb->window = NULL; } + + g_free(gtkwb->priv); g_free(gtkwb); purple_whiteboard_set_ui_data(wb, NULL); } @@ -356,13 +362,13 @@ static void pidginwhiteboard_button_start_press(GtkButton *button, gpointer data static gboolean pidgin_whiteboard_configure_event(GtkWidget *widget, GdkEventConfigure *event, gpointer data) { PidginWhiteboard *gtkwb = (PidginWhiteboard*)data; - GdkPixbuf *pixbuf = gtkwb->pixbuf; + GdkPixbuf *pixbuf = gtkwb->priv->pixbuf; cairo_t *cr; GdkWindow *window = gtk_widget_get_window(widget); GtkAllocation allocation; if (pixbuf) { - cr = g_object_get_data(G_OBJECT(pixbuf), "cairo-context"); + cr = gtkwb->priv->cr; if (cr) cairo_destroy(cr); g_object_unref(pixbuf); @@ -374,10 +380,10 @@ static gboolean pidgin_whiteboard_configure_event(GtkWidget *widget, GdkEventCon FALSE, gdk_visual_get_depth(GDK_VISUAL(window)), allocation.width, allocation.height); - gtkwb->pixbuf = pixbuf; + gtkwb->priv->pixbuf = pixbuf; cr = gdk_cairo_create(gtk_widget_get_window(widget)); - g_object_set_data(G_OBJECT(pixbuf), "cairo-context", cr); + gtkwb->priv->cr = cr; gdk_cairo_set_source_color(cr, >k_widget_get_style(widget)->white); cairo_rectangle(cr, 0, 0, @@ -390,7 +396,7 @@ static gboolean pidgin_whiteboard_configure_event(GtkWidget *widget, GdkEventCon static gboolean pidgin_whiteboard_expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data) { PidginWhiteboard *gtkwb = (PidginWhiteboard*)(data); - GdkPixbuf *pixbuf = gtkwb->pixbuf; + GdkPixbuf *pixbuf = gtkwb->priv->pixbuf; cairo_t *cr; cr = gdk_cairo_create(gtk_widget_get_window(widget)); @@ -407,7 +413,7 @@ static gboolean pidgin_whiteboard_expose_event(GtkWidget *widget, GdkEventExpose static gboolean pidgin_whiteboard_brush_down(GtkWidget *widget, GdkEventButton *event, gpointer data) { PidginWhiteboard *gtkwb = (PidginWhiteboard*)data; - GdkPixbuf *pixbuf = gtkwb->pixbuf; + GdkPixbuf *pixbuf = gtkwb->priv->pixbuf; PurpleWhiteboard *wb = gtkwb->wb; GList *draw_list = purple_whiteboard_get_draw_list(wb); @@ -460,7 +466,7 @@ static gboolean pidgin_whiteboard_brush_motion(GtkWidget *widget, GdkEventMotion GdkModifierType state; PidginWhiteboard *gtkwb = (PidginWhiteboard*)data; - GdkPixbuf *pixbuf = gtkwb->pixbuf; + GdkPixbuf *pixbuf = gtkwb->priv->pixbuf; PurpleWhiteboard *wb = gtkwb->wb; GList *draw_list = purple_whiteboard_get_draw_list(wb); @@ -540,7 +546,7 @@ static gboolean pidgin_whiteboard_brush_motion(GtkWidget *widget, GdkEventMotion static gboolean pidgin_whiteboard_brush_up(GtkWidget *widget, GdkEventButton *event, gpointer data) { PidginWhiteboard *gtkwb = (PidginWhiteboard*)data; - GdkPixbuf *pixbuf = gtkwb->pixbuf; + GdkPixbuf *pixbuf = gtkwb->priv->pixbuf; PurpleWhiteboard *wb = gtkwb->wb; GList *draw_list = purple_whiteboard_get_draw_list(wb); @@ -597,9 +603,7 @@ static void pidgin_whiteboard_draw_brush_point(PurpleWhiteboard *wb, int x, int { PidginWhiteboard *gtkwb = purple_whiteboard_get_ui_data(wb); GtkWidget *widget = gtkwb->drawing_area; - GdkPixbuf *pixbuf = gtkwb->pixbuf; - - cairo_t *gfx_con = g_object_get_data(G_OBJECT(pixbuf), "cairo-context"); + cairo_t *gfx_con = gtkwb->priv->cr; GdkColor col; /* Interpret and convert color */ @@ -705,9 +709,8 @@ static void pidgin_whiteboard_set_brush(PurpleWhiteboard *wb, int size, int colo static void pidgin_whiteboard_clear(PurpleWhiteboard *wb) { PidginWhiteboard *gtkwb = purple_whiteboard_get_ui_data(wb); - GdkPixbuf *pixbuf = gtkwb->pixbuf; GtkWidget *drawing_area = gtkwb->drawing_area; - cairo_t *cr = g_object_get_data(G_OBJECT(pixbuf), "cairo-context"); + cairo_t *cr = gtkwb->priv->cr; GtkAllocation allocation; gtk_widget_get_allocation(drawing_area, &allocation); @@ -788,7 +791,7 @@ static void pidgin_whiteboard_button_save_press(GtkWidget *widget, gpointer data gtk_widget_destroy(dialog); /* Makes an icon from the whiteboard's canvas 'image' */ - pixbuf = gtkwb->pixbuf; + pixbuf = gtkwb->priv->pixbuf; if(gdk_pixbuf_save(pixbuf, filename, "jpeg", NULL, "quality", "100", NULL)) purple_debug_info("gtkwhiteboard", "File Saved...\n"); @@ -809,7 +812,7 @@ static void pidgin_whiteboard_set_canvas_as_icon(PidginWhiteboard *gtkwb) GdkPixbuf *pixbuf; /* Makes an icon from the whiteboard's canvas 'image' */ - pixbuf = gtkwb->pixbuf; + pixbuf = gtkwb->priv->pixbuf; gtk_window_set_icon((GtkWindow*)(gtkwb->window), pixbuf); } diff --git a/pidgin/gtkwhiteboard.h b/pidgin/gtkwhiteboard.h index c2396ecc90..b1b9fb4951 100644 --- a/pidgin/gtkwhiteboard.h +++ b/pidgin/gtkwhiteboard.h @@ -42,21 +42,26 @@ #define PALETTE_NUM_COLORS 7 /** + * A PidginWhiteboard's private data + */ +typedef struct _PidginWhiteboardPrivate PidginWhiteboardPrivate; + +/** * A PidginWhiteboard */ typedef struct _PidginWhiteboard { - PurpleWhiteboard *wb; /**< backend data for this whiteboard */ + PidginWhiteboardPrivate *priv; /**< Internal data */ - GtkWidget *window; /**< Window for the Doodle session */ - GtkWidget *drawing_area; /**< Drawing area */ + PurpleWhiteboard *wb; /**< Backend data for this whiteboard */ - GdkPixbuf *pixbuf; /**< Memory for drawing area */ + GtkWidget *window; /**< Window for the Doodle session */ + GtkWidget *drawing_area; /**< Drawing area */ - int width; /**< Canvas width */ - int height; /**< Canvas height */ - int brush_color; /**< Foreground color */ - int brush_size; /**< Brush size */ + int width; /**< Canvas width */ + int height; /**< Canvas height */ + int brush_color; /**< Foreground color */ + int brush_size; /**< Brush size */ } PidginWhiteboard; G_BEGIN_DECLS |