summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElliott Sales de Andrade <qulogic@pidgin.im>2012-07-23 04:09:46 -0400
committerElliott Sales de Andrade <qulogic@pidgin.im>2012-07-23 04:09:46 -0400
commita6b1e1da588466a92f681367af4245a27604b6aa (patch)
treeda6fea8e8d10fc653c74403e1c754fd7cfd1e9c2
parentb32dd308a13ae959e3d6f0436e458aeb60cd3b9a (diff)
parente2d64dfd8d947da00f7d99ba2527780b450ce930 (diff)
downloadpidgin-a6b1e1da588466a92f681367af4245a27604b6aa.tar.gz
Merge with mainline.
-rw-r--r--pidgin/gtkblist.c3
-rw-r--r--pidgin/gtkblist.h2
-rw-r--r--pidgin/gtkdebug.c14
-rw-r--r--pidgin/gtkdialogs.h3
-rw-r--r--pidgin/gtkmenutray.c11
-rw-r--r--pidgin/gtkwebview.c39
-rw-r--r--pidgin/gtkwhiteboard.c43
-rw-r--r--pidgin/gtkwhiteboard.h21
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, &gtk_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