# HG changeset patch # User Marcus Lundblad # Date 1290724218 0 # Node ID a3bd979c9ce47fdf631dba6631ba3019dbc364bc # Parent ba21d11c06d0e0a98b47e00e9d7d582b8b9f5266 compiles using GTK+ 3 from git, beware it does not yet run, in fact it crashes... diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/gtkaccount.c --- a/pidgin/gtkaccount.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/gtkaccount.c Thu Nov 25 22:30:18 2010 +0000 @@ -378,9 +378,11 @@ account_dnd_recv(GtkWidget *widget, GdkDragContext *dc, gint x, gint y, GtkSelectionData *sd, guint info, guint t, AccountPrefsDialog *dialog) { - gchar *name = (gchar *)sd->data; - - if ((sd->length >= 0) && (sd->format == 8)) { + const gchar *name = (gchar *) gtk_selection_data_get_data(sd); + gint length = gtk_selection_data_get_length(sd); + gint format = gtk_selection_data_get_format(sd); + + if (length >= 0 && format == 8) { /* Well, it looks like the drag event was cool. * Let's do something with it */ if (!g_ascii_strncasecmp(name, "file://", 7)) { @@ -1050,7 +1052,7 @@ dialog->new_proxy_type == PURPLE_PROXY_NONE || dialog->new_proxy_type == PURPLE_PROXY_USE_ENVVAR) { - gtk_widget_hide_all(dialog->proxy_vbox); + gtk_widget_hide(dialog->proxy_vbox); } else gtk_widget_show_all(dialog->proxy_vbox); @@ -1145,7 +1147,7 @@ if (type == PURPLE_PROXY_USE_GLOBAL || type == PURPLE_PROXY_NONE || type == PURPLE_PROXY_USE_ENVVAR) - gtk_widget_hide_all(vbox2); + gtk_widget_hide(vbox2); if ((value = purple_proxy_info_get_host(proxy_info)) != NULL) @@ -1169,7 +1171,7 @@ dialog->new_proxy_type = PURPLE_PROXY_USE_GLOBAL; gtk_combo_box_set_active(GTK_COMBO_BOX(dialog->proxy_dropdown), dialog->new_proxy_type + 1); - gtk_widget_hide_all(vbox2); + gtk_widget_hide(vbox2); } /* Connect signals. */ @@ -1709,7 +1711,10 @@ GtkSelectionData *data, guint info, guint time, AccountsWindow *dialog) { - if (data->target == gdk_atom_intern("PURPLE_ACCOUNT", FALSE)) { + + GdkAtom target = gtk_selection_data_get_target(data); + + if (target == gdk_atom_intern("PURPLE_ACCOUNT", FALSE)) { GtkTreeRowReference *ref; GtkTreePath *source_row; GtkTreeIter iter; @@ -1780,13 +1785,16 @@ guint x, guint y, GtkSelectionData *sd, guint info, guint t, AccountsWindow *dialog) { - if (sd->target == gdk_atom_intern("PURPLE_ACCOUNT", FALSE) && sd->data) { + GdkAtom target = gtk_selection_data_get_target(sd); + const guchar *data = gtk_selection_data_get_data(sd); + + if (target == gdk_atom_intern("PURPLE_ACCOUNT", FALSE) && data) { gint dest_index; PurpleAccount *a = NULL; GtkTreePath *path = NULL; GtkTreeViewDropPosition position; - memcpy(&a, sd->data, sizeof(a)); + memcpy(&a, data, sizeof(a)); if (gtk_tree_view_get_dest_row_at_pos(GTK_TREE_VIEW(widget), x, y, &path, &position)) { diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/gtkblist-theme-loader.c --- a/pidgin/gtkblist-theme-loader.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/gtkblist-theme-loader.c Thu Nov 25 22:30:18 2010 +0000 @@ -65,7 +65,8 @@ GdkColor color; if (temp && gdk_color_parse(temp, &color)) { - gdk_colormap_alloc_color(gdk_colormap_get_system(), &color, FALSE, TRUE); + /* TODO: fix this for gtk+ 3.0 */ + /*gdk_colormap_alloc_color(gdk_colormap_get_system(), &color, FALSE, TRUE);*/ return gdk_color_copy(&color); } else { return NULL; diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/gtkblist.c --- a/pidgin/gtkblist.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/gtkblist.c Thu Nov 25 22:30:18 2010 +0000 @@ -244,7 +244,7 @@ /* check for visibility because when we aren't visible, this will * * give us bogus (0,0) coordinates. - xOr */ - if (GTK_WIDGET_VISIBLE(w)) + if (gtk_widget_get_visible(w)) gtk_window_get_position(GTK_WINDOW(w), &x, &y); else return FALSE; /* carry on normally */ @@ -990,20 +990,23 @@ gtkblist = PIDGIN_BLIST(purple_get_blist()); blist_window = gtkblist ? GTK_WINDOW(gtkblist->window) : NULL; + /* TODO: set no separator in gtk+ 3... */ data->window = gtk_dialog_new_with_buttons(title, - blist_window, GTK_DIALOG_NO_SEPARATOR, - NULL); + blist_window, 0, NULL); gtk_window_set_transient_for(GTK_WINDOW(data->window), blist_window); gtk_dialog_set_default_response(GTK_DIALOG(data->window), GTK_RESPONSE_OK); gtk_container_set_border_width(GTK_CONTAINER(data->window), PIDGIN_HIG_BOX_SPACE); gtk_window_set_resizable(GTK_WINDOW(data->window), FALSE); - gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(data->window)->vbox), PIDGIN_HIG_BORDER); - gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), PIDGIN_HIG_BOX_SPACE); + gtk_box_set_spacing(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(data->window))), + PIDGIN_HIG_BORDER); + gtk_container_set_border_width(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(data->window))), + PIDGIN_HIG_BOX_SPACE); gtk_window_set_role(GTK_WINDOW(data->window), window_role); hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), hbox); + gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(data->window))), + hbox); gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); gtk_misc_set_alignment(GTK_MISC(img), 0, 0); @@ -1066,7 +1069,7 @@ if (pce->is_int) { - GtkObject *adjust; + GtkAdjustment *adjust; adjust = gtk_adjustment_new(pce->min, pce->min, pce->max, 1, 10, 10); input = gtk_spin_button_new(GTK_ADJUSTMENT(adjust), 1, 0); @@ -1627,11 +1630,11 @@ pidgin_retrieve_user_info(buddy->account->gc, buddy->name); } else { switch (event->keyval) { - case GDK_F2: + case GDK_KEY_F2: gtk_blist_menu_alias_cb(tv, node); break; - case GDK_Left: + case GDK_KEY_Left: path = gtk_tree_model_get_path(GTK_TREE_MODEL(gtkblist->treemodel), &iter); if (gtk_tree_view_row_expanded(GTK_TREE_VIEW(tv), path)) { /* Collapse the Group */ @@ -1653,7 +1656,7 @@ gtk_tree_path_free(path); break; - case GDK_Right: + case GDK_KEY_Right: path = gtk_tree_model_get_path(GTK_TREE_MODEL(gtkblist->treemodel), &iter); if (!gtk_tree_view_row_expanded(GTK_TREE_VIEW(tv), path)) { /* Expand the Group */ @@ -2276,9 +2279,9 @@ guint time, gpointer null) { - - if (data->target == gdk_atom_intern("PURPLE_BLIST_NODE", FALSE)) - { + GdkAtom target = gtk_selection_data_get_target(data); + + if (target == gdk_atom_intern("PURPLE_BLIST_NODE", FALSE)) { GtkTreeRowReference *ref = g_object_get_data(G_OBJECT(dc), "gtk-tree-view-source-row"); GtkTreePath *sourcerow = gtk_tree_row_reference_get_path(ref); GtkTreeIter iter; @@ -2297,9 +2300,7 @@ sizeof (node)); gtk_tree_path_free(sourcerow); - } - else if (data->target == gdk_atom_intern("application/x-im-contact", FALSE)) - { + } else if (target == gdk_atom_intern("application/x-im-contact", FALSE)) { GtkTreeRowReference *ref; GtkTreePath *sourcerow; GtkTreeIter iter; @@ -2382,16 +2383,19 @@ static void pidgin_blist_drag_data_rcv_cb(GtkWidget *widget, GdkDragContext *dc, guint x, guint y, GtkSelectionData *sd, guint info, guint t) { + GdkAtom target = gtk_selection_data_get_target(sd); + const guchar *data = gtk_selection_data_get_data(sd); + if (gtkblist->drag_timeout) { g_source_remove(gtkblist->drag_timeout); gtkblist->drag_timeout = 0; } - if (sd->target == gdk_atom_intern("PURPLE_BLIST_NODE", FALSE) && sd->data) { + if (target == gdk_atom_intern("PURPLE_BLIST_NODE", FALSE) && data) { PurpleBlistNode *n = NULL; GtkTreePath *path = NULL; GtkTreeViewDropPosition position; - memcpy(&n, sd->data, sizeof(n)); + memcpy(&n, data, sizeof(n)); if(gtk_tree_view_get_dest_row_at_pos(GTK_TREE_VIEW(widget), x, y, &path, &position)) { /* if we're here, I think it means the drop is ok */ GtkTreeIter iter; @@ -2530,12 +2534,10 @@ } gtk_tree_path_free(path); - gtk_drag_finish(dc, TRUE, (dc->action == GDK_ACTION_MOVE), t); - } - } - else if (sd->target == gdk_atom_intern("application/x-im-contact", - FALSE) && sd->data) - { + gtk_drag_finish(dc, TRUE, (gdk_drag_context_get_actions(dc) == GDK_ACTION_MOVE), t); + } + } else if (target == gdk_atom_intern("application/x-im-contact", + FALSE) && data) { PurpleGroup *group = NULL; GtkTreePath *path = NULL; GtkTreeViewDropPosition position; @@ -2573,7 +2575,7 @@ } } - if (pidgin_parse_x_im_contact((const char *)sd->data, FALSE, &account, + if (pidgin_parse_x_im_contact((const char *) data, FALSE, &account, &protocol, &username, &alias)) { if (account == NULL) @@ -2597,9 +2599,10 @@ if (path != NULL) gtk_tree_path_free(path); - gtk_drag_finish(dc, TRUE, (dc->action == GDK_ACTION_MOVE), t); - } - else if (sd->target == gdk_atom_intern("text/x-vcard", FALSE) && sd->data) + gtk_drag_finish(dc, TRUE, + (gdk_drag_context_get_actions(dc) == GDK_ACTION_MOVE), t); + } + else if (target == gdk_atom_intern("text/x-vcard", FALSE) && data) { gboolean result; PurpleGroup *group = NULL; @@ -2635,10 +2638,11 @@ } } - result = parse_vcard((const gchar *)sd->data, group); - - gtk_drag_finish(dc, result, (dc->action == GDK_ACTION_MOVE), t); - } else if (sd->target == gdk_atom_intern("text/uri-list", FALSE) && sd->data) { + result = parse_vcard((const gchar *) data, group); + + gtk_drag_finish(dc, result, + (gdk_drag_context_get_actions(dc) == GDK_ACTION_MOVE), t); + } else if (target == gdk_atom_intern("text/uri-list", FALSE) && data) { GtkTreePath *path = NULL; GtkTreeViewDropPosition position; @@ -2659,7 +2663,8 @@ if (PURPLE_BLIST_NODE_IS_BUDDY(node) || PURPLE_BLIST_NODE_IS_CONTACT(node)) { PurpleBuddy *b = PURPLE_BLIST_NODE_IS_BUDDY(node) ? PURPLE_BUDDY(node) : purple_contact_get_priority_buddy(PURPLE_CONTACT(node)); pidgin_dnd_file_manage(sd, b->account, b->name); - gtk_drag_finish(dc, TRUE, (dc->action == GDK_ACTION_MOVE), t); + gtk_drag_finish(dc, TRUE, + (gdk_drag_context_get_actions(dc) == GDK_ACTION_MOVE), t); } else { gtk_drag_finish(dc, FALSE, FALSE, t); } @@ -2997,7 +3002,7 @@ if(gtkblist->tooltipdata == NULL) return FALSE; - style = gtkblist->tipwindow->style; + style = gtk_widget_get_style(gtkblist->tipwindow); max_text_width = 0; max_avatar_width = 0; @@ -3023,73 +3028,102 @@ for(l = gtkblist->tooltipdata; l; l = l->next) { struct tooltip_data *td = l->data; - + cairo_t *cr = gdk_cairo_create(GDK_DRAWABLE(gtkblist->tipwindow)); + if (td->avatar && pidgin_gdk_pixbuf_is_opaque(td->avatar)) { if (dir == GTK_TEXT_DIR_RTL) - gtk_paint_flat_box(style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, GTK_SHADOW_OUT, - NULL, gtkblist->tipwindow, "tooltip", - TOOLTIP_BORDER -1, current_height -1, td->avatar_width +2, td->avatar_height + 2); + gtk_paint_flat_box(style, cr, GTK_STATE_NORMAL, GTK_SHADOW_OUT, + gtkblist->tipwindow, "tooltip", + TOOLTIP_BORDER -1, current_height -1, td->avatar_width +2, + td->avatar_height + 2); else - gtk_paint_flat_box(style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, GTK_SHADOW_OUT, - NULL, gtkblist->tipwindow, "tooltip", + gtk_paint_flat_box(style, cr, GTK_STATE_NORMAL, GTK_SHADOW_OUT, + gtkblist->tipwindow, "tooltip", max_width - (td->avatar_width+ TOOLTIP_BORDER)-1, current_height-1,td->avatar_width+2, td->avatar_height+2); } if (td->status_icon) { - if (dir == GTK_TEXT_DIR_RTL) + if (dir == GTK_TEXT_DIR_RTL) { + gdk_cairo_set_source_pixbuf(cr, td->status_icon, + max_width - TOOLTIP_BORDER - status_size, current_height); + cairo_paint(cr); + /* gdk_draw_pixbuf(GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, td->status_icon, 0, 0, max_width - TOOLTIP_BORDER - status_size, current_height, -1, -1, GDK_RGB_DITHER_NONE, 0, 0); - else + */ + } else { + gdk_cairo_set_source_pixbuf(cr, td->status_icon, TOOLTIP_BORDER, current_height); + cairo_paint(cr); + /* gdk_draw_pixbuf(GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, td->status_icon, 0, 0, TOOLTIP_BORDER, current_height, -1 , -1, GDK_RGB_DITHER_NONE, 0, 0); - } + */ + } + } if(td->avatar) { - if (dir == GTK_TEXT_DIR_RTL) + if (dir == GTK_TEXT_DIR_RTL) { + gdk_cairo_set_source_pixbuf(cr, td->avatar, TOOLTIP_BORDER, current_height); + cairo_paint(cr); + /* gdk_draw_pixbuf(GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, td->avatar, 0, 0, TOOLTIP_BORDER, current_height, -1, -1, GDK_RGB_DITHER_NONE, 0, 0); - else + */ + } else { + gdk_cairo_set_source_pixbuf(cr, td->avatar, + max_width - (td->avatar_width + TOOLTIP_BORDER), current_height); + cairo_paint(cr); + /* gdk_draw_pixbuf(GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, td->avatar, 0, 0, max_width - (td->avatar_width + TOOLTIP_BORDER), current_height, -1 , -1, GDK_RGB_DITHER_NONE, 0, 0); - } - - if (!td->avatar_is_prpl_icon && td->prpl_icon) + */ + } + } + + if (!td->avatar_is_prpl_icon && td->prpl_icon) { + gdk_cairo_set_source_pixbuf(cr, td->prpl_icon, prpl_col, + current_height + ((td->name_height / 2) - (PRPL_SIZE / 2))); + cairo_paint(cr); + /* gdk_draw_pixbuf(GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, td->prpl_icon, 0, 0, prpl_col, current_height + ((td->name_height / 2) - (PRPL_SIZE / 2)), -1 , -1, GDK_RGB_DITHER_NONE, 0, 0); + */ + } if (td->name_layout) { if (dir == GTK_TEXT_DIR_RTL) { - gtk_paint_layout(style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, FALSE, - NULL, gtkblist->tipwindow, "tooltip", + gtk_paint_layout(style, cr, GTK_STATE_NORMAL, FALSE, + gtkblist->tipwindow, "tooltip", max_width -(TOOLTIP_BORDER + status_size + SMALL_SPACE) - PANGO_PIXELS(300000), current_height, td->name_layout); } else { - gtk_paint_layout (style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, FALSE, - NULL, gtkblist->tipwindow, "tooltip", + gtk_paint_layout (style, cr, GTK_STATE_NORMAL, FALSE, + gtkblist->tipwindow, "tooltip", TOOLTIP_BORDER + status_size + SMALL_SPACE, current_height, td->name_layout); } } if (td->layout) { if (dir != GTK_TEXT_DIR_RTL) { - gtk_paint_layout (style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, FALSE, - NULL, gtkblist->tipwindow, "tooltip", + gtk_paint_layout (style, cr, GTK_STATE_NORMAL, FALSE, + gtkblist->tipwindow, "tooltip", TOOLTIP_BORDER + status_size + SMALL_SPACE, current_height + td->name_height, td->layout); } else { - gtk_paint_layout(style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, FALSE, - NULL, gtkblist->tipwindow, "tooltip", + gtk_paint_layout(style, cr, GTK_STATE_NORMAL, FALSE, + gtkblist->tipwindow, "tooltip", max_width - (TOOLTIP_BORDER + status_size + SMALL_SPACE) - PANGO_PIXELS(300000), current_height + td->name_height, td->layout); } } + cairo_destroy(cr); current_height += MAX(td->name_height + td->height, td->avatar_height) + td->padding; } return FALSE; @@ -3243,7 +3277,8 @@ pidgin_blist_expand_contact_cb(NULL, node); gtk_tree_view_get_cell_area(GTK_TREE_VIEW(tv), path, NULL, >kblist->contact_rect); - gdk_drawable_get_size(GDK_DRAWABLE(tv->window), &(gtkblist->contact_rect.width), NULL); + gtkblist->contact_rect.width = + gdk_window_get_width(GDK_DRAWABLE(gtk_widget_get_window(tv))); gtkblist->mouseover_contact = node; gtk_tree_path_down (path); while (gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &i, path)) { @@ -4575,7 +4610,7 @@ /* if the window exists, is hidden, we're saving positions, and the * position is sane... */ if (gtkblist && gtkblist->window && - !GTK_WIDGET_VISIBLE(gtkblist->window) && blist_width != 0) { + !gtk_widget_get_visible(gtkblist->window) && blist_width != 0) { blist_x = purple_prefs_get_int(PIDGIN_PREFS_ROOT "/blist/x"); blist_y = purple_prefs_get_int(PIDGIN_PREFS_ROOT "/blist/y"); @@ -4605,7 +4640,7 @@ PurpleBlistNode *gnode, *cnode; if (gtk_blist_visibility == GDK_VISIBILITY_FULLY_OBSCURED - || !GTK_WIDGET_VISIBLE(gtkblist->window)) + || !gtk_widget_get_visible(gtkblist->window)) return TRUE; for(gnode = list->root; gnode; gnode = gnode->next) { @@ -5117,7 +5152,7 @@ widget = gtk_window_get_focus(GTK_WINDOW(gtkblist->window)); if (GTK_IS_IMHTML(widget) || GTK_IS_ENTRY(widget)) { - if (gtk_bindings_activate(GTK_OBJECT(widget), event->keyval, event->state)) + if (gtk_bindings_activate(G_OBJECT(widget), event->keyval, event->state)) return TRUE; } return FALSE; @@ -5126,14 +5161,14 @@ static gboolean headline_box_enter_cb(GtkWidget *widget, GdkEventCrossing *event, PidginBuddyList *gtkblist) { - gdk_window_set_cursor(widget->window, gtkblist->hand_cursor); + gdk_window_set_cursor(gtk_widget_get_window(widget), gtkblist->hand_cursor); return FALSE; } static gboolean headline_box_leave_cb(GtkWidget *widget, GdkEventCrossing *event, PidginBuddyList *gtkblist) { - gdk_window_set_cursor(widget->window, gtkblist->arrow_cursor); + gdk_window_set_cursor(gtk_widget_get_window(widget), gtkblist->arrow_cursor); return FALSE; } @@ -5267,7 +5302,7 @@ } static void -generic_error_destroy_cb(GtkObject *dialog, +generic_error_destroy_cb(GtkWidget *dialog, PurpleAccount *account) { g_hash_table_remove(gtkblist->connection_errors, account); @@ -5629,17 +5664,22 @@ GdkEventExpose *event, gpointer user_data) { - gtk_paint_flat_box (widget->style, - widget->window, + cairo_t *cr = gdk_cairo_create(GDK_DRAWABLE(widget)); + GtkAllocation allocation; + + gtk_widget_get_allocation(widget, &allocation); + gtk_paint_flat_box (gtk_widget_get_style(widget), + cr, GTK_STATE_NORMAL, GTK_SHADOW_OUT, - NULL, widget, "tooltip", - widget->allocation.x + 1, - widget->allocation.y + 1, - widget->allocation.width - 2, - widget->allocation.height - 2); + allocation.x + 1, + allocation.y + 1, + allocation.width - 2, + allocation.height - 2); + cairo_destroy(cr); + return FALSE; } @@ -5979,7 +6019,9 @@ G_CALLBACK(blist_focus_cb), gtkblist); g_signal_connect(G_OBJECT(gtkblist->window), "focus-out-event", G_CALLBACK(blist_focus_cb), gtkblist); - GTK_WINDOW(gtkblist->window)->allow_shrink = TRUE; + + /* TODO: how is this done in gtk+ 3.0? */ + /*GTK_WINDOW(gtkblist->window)->allow_shrink = TRUE;*/ gtkblist->main_vbox = gtk_vbox_new(FALSE, 0); gtk_widget_show(gtkblist->main_vbox); @@ -7138,7 +7180,8 @@ return; if (show) { - if(!PIDGIN_WINDOW_ICONIFIED(gtkblist->window) && !GTK_WIDGET_VISIBLE(gtkblist->window)) + if(!PIDGIN_WINDOW_ICONIFIED(gtkblist->window) && + !gtk_widget_get_visible(gtkblist->window)) purple_signal_emit(pidgin_blist_get_handle(), "gtkblist-unhiding", gtkblist); pidgin_blist_restore_position(); gtk_window_present(GTK_WINDOW(gtkblist->window)); @@ -7147,7 +7190,7 @@ purple_signal_emit(pidgin_blist_get_handle(), "gtkblist-hiding", gtkblist); gtk_widget_hide(gtkblist->window); } else { - if (!GTK_WIDGET_VISIBLE(gtkblist->window)) + if (!gtk_widget_get_visible(gtkblist->window)) gtk_widget_show(gtkblist->window); gtk_window_iconify(GTK_WINDOW(gtkblist->window)); } @@ -7523,7 +7566,7 @@ pidgin_blist_toggle_visibility() { if (gtkblist && gtkblist->window) { - if (GTK_WIDGET_VISIBLE(gtkblist->window)) { + if (gtk_widget_get_visible(gtkblist->window)) { /* make the buddy list visible if it is iconified or if it is * obscured and not currently focused (the focus part ensures * that we do something reasonable if the buddy list is obscured @@ -7588,7 +7631,7 @@ static void set_urgent(void) { - if (gtkblist->window && !GTK_WIDGET_HAS_FOCUS(gtkblist->window)) + if (gtkblist->window && !gtk_widget_is_focus(gtkblist->window)) pidgin_set_urgent(GTK_WINDOW(gtkblist->window), TRUE); } @@ -8131,7 +8174,7 @@ } static void -plugin_act(GtkObject *obj, PurplePluginAction *pam) +plugin_act(GtkWidget *obj, PurplePluginAction *pam) { if (pam && pam->callback) pam->callback(pam); diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/gtkcellrendererexpander.c --- a/pidgin/gtkcellrendererexpander.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/gtkcellrendererexpander.c Thu Nov 25 22:30:18 2010 +0000 @@ -44,24 +44,23 @@ static void pidgin_cell_renderer_expander_class_init (PidginCellRendererExpanderClass *class); static void pidgin_cell_renderer_expander_get_size (GtkCellRenderer *cell, GtkWidget *widget, - GdkRectangle *cell_area, + const GdkRectangle *cell_area, gint *x_offset, gint *y_offset, gint *width, gint *height); static void pidgin_cell_renderer_expander_render (GtkCellRenderer *cell, - GdkWindow *window, + cairo_t *cr, GtkWidget *widget, - GdkRectangle *background_area, - GdkRectangle *cell_area, - GdkRectangle *expose_area, - guint flags); + const GdkRectangle *background_area, + const GdkRectangle *cell_area, + GtkCellRendererState flags); static gboolean pidgin_cell_renderer_expander_activate (GtkCellRenderer *r, GdkEvent *event, GtkWidget *widget, const gchar *p, - GdkRectangle *bg, - GdkRectangle *cell, + const GdkRectangle *bg, + const GdkRectangle *cell, GtkCellRendererState flags); static void pidgin_cell_renderer_expander_finalize (GObject *gobject); @@ -108,9 +107,10 @@ static void pidgin_cell_renderer_expander_init (PidginCellRendererExpander *cellexpander) { - GTK_CELL_RENDERER(cellexpander)->mode = GTK_CELL_RENDERER_MODE_ACTIVATABLE; - GTK_CELL_RENDERER(cellexpander)->xpad = 0; - GTK_CELL_RENDERER(cellexpander)->ypad = 2; + g_object_set(G_OBJECT(cellexpander), "mode", + GTK_CELL_RENDERER_MODE_ACTIVATABLE, NULL); + /*GTK_CELL_RENDERER(cellexpander)->mode = GTK_CELL_RENDERER_MODE_ACTIVATABLE;*/ + gtk_cell_renderer_set_padding(GTK_CELL_RENDERER(cellexpander), 0, 2); } static void pidgin_cell_renderer_expander_class_init (PidginCellRendererExpanderClass *class) @@ -190,7 +190,7 @@ static void pidgin_cell_renderer_expander_get_size (GtkCellRenderer *cell, GtkWidget *widget, - GdkRectangle *cell_area, + const GdkRectangle *cell_area, gint *x_offset, gint *y_offset, gint *width, @@ -199,11 +199,17 @@ gint calc_width; gint calc_height; gint expander_size; - + gint xpad; + gint ypad; + gfloat xalign; + gfloat yalign; + gtk_widget_style_get(widget, "expander-size", &expander_size, NULL); - calc_width = (gint) cell->xpad * 2 + expander_size; - calc_height = (gint) cell->ypad * 2 + expander_size; + gtk_cell_renderer_get_padding(cell, &xpad, &ypad); + gtk_cell_renderer_get_alignment(cell, &xalign, &yalign); + calc_width = (gint) xpad * 2 + expander_size; + calc_height = (gint) ypad * 2 + expander_size; if (width) *width = calc_width; @@ -215,12 +221,12 @@ { if (x_offset) { - *x_offset = cell->xalign * (cell_area->width - calc_width); + *x_offset = xalign * (cell_area->width - calc_width); *x_offset = MAX (*x_offset, 0); } if (y_offset) { - *y_offset = cell->yalign * (cell_area->height - calc_height); + *y_offset = yalign * (cell_area->height - calc_height); *y_offset = MAX (*y_offset, 0); } } @@ -228,56 +234,64 @@ static void pidgin_cell_renderer_expander_render(GtkCellRenderer *cell, - GdkWindow *window, + cairo_t *cr, GtkWidget *widget, - GdkRectangle *background_area, - GdkRectangle *cell_area, - GdkRectangle *expose_area, - guint flags) + const GdkRectangle *background_area, + const GdkRectangle *cell_area, + GtkCellRendererState flags) { PidginCellRendererExpander *cellexpander = (PidginCellRendererExpander *) cell; gboolean set; gint width, height; GtkStateType state; - + gint xpad; + gint ypad; + gboolean is_expanded; + GtkAllocation allocation; + + gtk_cell_renderer_get_padding(cell, &xpad, &ypad); + g_object_get(G_OBJECT(cell), "expanded", &is_expanded, NULL); + if (!cellexpander->is_expander) return; width = cell_area->width; height = cell_area->height; - if (!cell->sensitive) + if (!gtk_widget_get_sensitive(GTK_WIDGET(cell))) state = GTK_STATE_INSENSITIVE; else if (flags & GTK_CELL_RENDERER_PRELIT) state = GTK_STATE_PRELIGHT; - else if (GTK_WIDGET_HAS_FOCUS (widget) && flags & GTK_CELL_RENDERER_SELECTED) + else if (gtk_widget_has_focus(widget) && flags & GTK_CELL_RENDERER_SELECTED) state = GTK_STATE_ACTIVE; else state = GTK_STATE_NORMAL; - width -= cell->xpad*2; - height -= cell->ypad*2; + width -= xpad*2; + height -= ypad*2; - gtk_paint_expander (widget->style, - window, state, - NULL, widget, "treeview", - cell_area->x + cell->xpad + (width / 2), - cell_area->y + cell->ypad + (height / 2), - cell->is_expanded ? GTK_EXPANDER_EXPANDED : GTK_EXPANDER_COLLAPSED); + gtk_paint_expander (gtk_widget_get_style(widget), + cr, state, + widget, "treeview", + cell_area->x + xpad + (width / 2), + cell_area->y + ypad + (height / 2), + is_expanded ? GTK_EXPANDER_EXPANDED : GTK_EXPANDER_COLLAPSED); /* only draw the line if the color isn't set - this prevents a bug where the hline appears only under the expander */ g_object_get(cellexpander, "cell-background-set", &set, NULL); - if (cell->is_expanded && !set) - gtk_paint_hline (widget->style, window, state, NULL, widget, NULL, 0, - widget->allocation.width, cell_area->y + cell_area->height); + gtk_widget_get_allocation(widget, &allocation); + + if (is_expanded && !set) + gtk_paint_hline (gtk_widget_get_style(widget), cr, state, widget, NULL, 0, + allocation.width, cell_area->y + cell_area->height); } static gboolean pidgin_cell_renderer_expander_activate(GtkCellRenderer *r, GdkEvent *event, GtkWidget *widget, const gchar *p, - GdkRectangle *bg, - GdkRectangle *cell, + const GdkRectangle *bg, + const GdkRectangle *cell, GtkCellRendererState flags) { GtkTreePath *path = gtk_tree_path_new_from_string(p); diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/gtkconv.c --- a/pidgin/gtkconv.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/gtkconv.c Thu Nov 25 22:30:18 2010 +0000 @@ -778,15 +778,17 @@ InviteBuddyInfo *info = (InviteBuddyInfo *)data; const char *convprotocol; gboolean success = TRUE; - + GdkAtom target = gtk_selection_data_get_target(sd); + convprotocol = purple_account_get_protocol_id(purple_conversation_get_account(info->conv)); - if (sd->target == gdk_atom_intern("PURPLE_BLIST_NODE", FALSE)) + if (target == gdk_atom_intern("PURPLE_BLIST_NODE", FALSE)) { PurpleBlistNode *node = NULL; PurpleBuddy *buddy; - - memcpy(&node, sd->data, sizeof(node)); + const guchar *data = gtk_selection_data_get_data(sd); + + memcpy(&node, data, sizeof(node)); if (PURPLE_BLIST_NODE_IS_CONTACT(node)) buddy = purple_contact_get_priority_buddy((PurpleContact *)node); @@ -805,15 +807,16 @@ else gtk_entry_set_text(GTK_ENTRY(info->entry), purple_buddy_get_name(buddy)); - gtk_drag_finish(dc, success, (dc->action == GDK_ACTION_MOVE), t); - } - else if (sd->target == gdk_atom_intern("application/x-im-contact", FALSE)) + gtk_drag_finish(dc, success, + gdk_drag_context_get_actions(dc) == GDK_ACTION_MOVE, t); + } + else if (target == gdk_atom_intern("application/x-im-contact", FALSE)) { char *protocol = NULL; char *username = NULL; PurpleAccount *account; - if (pidgin_parse_x_im_contact((const char *)sd->data, FALSE, &account, + if (pidgin_parse_x_im_contact((const char *) data, FALSE, &account, &protocol, &username, NULL)) { if (account == NULL) @@ -838,7 +841,8 @@ g_free(username); g_free(protocol); - gtk_drag_finish(dc, success, (dc->action == GDK_ACTION_MOVE), t); + gtk_drag_finish(dc, success, + gdk_drag_context_get_actions(dc) == GDK_ACTION_MOVE, t); } } @@ -880,12 +884,15 @@ GTK_RESPONSE_OK); gtk_container_set_border_width(GTK_CONTAINER(invite_dialog), PIDGIN_HIG_BOX_SPACE); gtk_window_set_resizable(GTK_WINDOW(invite_dialog), FALSE); + /* TODO: set no separator using GTK+ 3.0 */ + /* gtk_dialog_set_has_separator(GTK_DIALOG(invite_dialog), FALSE); - + */ + info->window = GTK_WIDGET(invite_dialog); /* Setup the outside spacing. */ - vbox = GTK_DIALOG(invite_dialog)->vbox; + vbox = gtk_dialog_get_content_area(GTK_DIALOG(invite_dialog)); gtk_box_set_spacing(GTK_BOX(vbox), PIDGIN_HIG_BORDER); gtk_container_set_border_width(GTK_CONTAINER(vbox), PIDGIN_HIG_BOX_SPACE); @@ -1078,8 +1085,8 @@ gtkblist = pidgin_blist_get_default_gtk_blist(); cursor = gdk_cursor_new(GDK_WATCH); - gdk_window_set_cursor(gtkblist->window->window, cursor); - gdk_window_set_cursor(win->window->window, cursor); + gdk_window_set_cursor(gtk_widget_get_window(gtkblist->window), cursor); + gdk_window_set_cursor(gtk_widget_get_window(win->window), cursor); gdk_cursor_unref(cursor); #if GTK_CHECK_VERSION(2,4,0) && !GTK_CHECK_VERSION(2,6,0) //FIXME: What? gdk_display_flush(gdk_drawable_get_display(GDK_DRAWABLE(widget->window))); @@ -1096,8 +1103,8 @@ { pidgin_log_show_contact((PurpleContact *)node->parent); g_slist_free(buddies); - gdk_window_set_cursor(gtkblist->window->window, NULL); - gdk_window_set_cursor(win->window->window, NULL); + gdk_window_set_cursor(gtk_widget_get_window(gtkblist->window), NULL); + gdk_window_set_cursor(gtk_widget_get_window(win->window), NULL); return; } } @@ -1105,8 +1112,8 @@ pidgin_log_show(type, name, account); - gdk_window_set_cursor(gtkblist->window->window, NULL); - gdk_window_set_cursor(win->window->window, NULL); + gdk_window_set_cursor(gtk_widget_get_window(gtkblist->window), NULL); + gdk_window_set_cursor(gtk_widget_get_window(win->window), NULL); } static void @@ -1919,7 +1926,7 @@ /* If CTRL was held down... */ if (event->state & GDK_CONTROL_MASK) { switch (event->keyval) { - case GDK_Page_Down: + case GDK_KEY_Page_Down: case ']': if (!pidgin_conv_window_get_gtkconv_at_index(win, curconv + 1)) gtk_notebook_set_current_page(GTK_NOTEBOOK(win->notebook), 0); @@ -1928,7 +1935,7 @@ return TRUE; break; - case GDK_Page_Up: + case GDK_KEY_Page_Up: case '[': if (!pidgin_conv_window_get_gtkconv_at_index(win, curconv - 1)) gtk_notebook_set_current_page(GTK_NOTEBOOK(win->notebook), -1); @@ -1937,9 +1944,9 @@ return TRUE; break; - case GDK_Tab: - case GDK_KP_Tab: - case GDK_ISO_Left_Tab: + case GDK_KEY_Tab: + case GDK_KEY_KP_Tab: + case GDK_KEY_ISO_Left_Tab: if (event->state & GDK_SHIFT_MASK) { move_to_next_unread_tab(gtkconv, FALSE); } else { @@ -1949,20 +1956,20 @@ return TRUE; break; - case GDK_comma: + case GDK_KEY_comma: gtk_notebook_reorder_child(GTK_NOTEBOOK(win->notebook), gtk_notebook_get_nth_page(GTK_NOTEBOOK(win->notebook), curconv), curconv - 1); return TRUE; break; - case GDK_period: + case GDK_KEY_period: gtk_notebook_reorder_child(GTK_NOTEBOOK(win->notebook), gtk_notebook_get_nth_page(GTK_NOTEBOOK(win->notebook), curconv), (curconv + 1) % gtk_notebook_get_n_pages(GTK_NOTEBOOK(win->notebook))); return TRUE; break; - case GDK_F6: + case GDK_KEY_F6: if (gtkconv_cycle_focus(gtkconv, event->state & GDK_SHIFT_MASK ? GTK_DIR_TAB_BACKWARD : GTK_DIR_TAB_FORWARD)) return TRUE; break; @@ -1986,13 +1993,13 @@ else { switch (event->keyval) { - case GDK_F2: + case GDK_KEY_F2: if (gtk_widget_is_focus(GTK_WIDGET(win->notebook))) { infopane_entry_activate(gtkconv); return TRUE; } break; - case GDK_F6: + case GDK_KEY_F6: if (gtkconv_cycle_focus(gtkconv, event->state & GDK_SHIFT_MASK ? GTK_DIR_TAB_BACKWARD : GTK_DIR_TAB_FORWARD)) return TRUE; break; @@ -2016,7 +2023,7 @@ /* If CTRL was held down... */ if (event->state & GDK_CONTROL_MASK) { switch (event->keyval) { - case GDK_Up: + case GDK_KEY_Up: if (!gtkconv->send_history) break; @@ -2067,7 +2074,7 @@ return TRUE; break; - case GDK_Down: + case GDK_KEY_Down: if (!gtkconv->send_history) break; @@ -2120,20 +2127,20 @@ /* If neither CTRL nor ALT were held down... */ else { switch (event->keyval) { - case GDK_Tab: - case GDK_KP_Tab: - case GDK_ISO_Left_Tab: + case GDK_KEY_Tab: + case GDK_KEY_KP_Tab: + case GDK_KEY_ISO_Left_Tab: if (gtkconv->entry != entry) break; return tab_complete(conv); break; - case GDK_Page_Up: + case GDK_KEY_Page_Up: gtk_imhtml_page_up(GTK_IMHTML(gtkconv->imhtml)); return TRUE; break; - case GDK_Page_Down: + case GDK_KEY_Page_Down: gtk_imhtml_page_down(GTK_IMHTML(gtkconv->imhtml)); return TRUE; break; @@ -2177,24 +2184,24 @@ /* If we have a valid key for the conversation display, then exit */ if ((event->state & GDK_CONTROL_MASK) || - (event->keyval == GDK_F6) || - (event->keyval == GDK_F10) || - (event->keyval == GDK_Shift_L) || - (event->keyval == GDK_Shift_R) || - (event->keyval == GDK_Control_L) || - (event->keyval == GDK_Control_R) || - (event->keyval == GDK_Escape) || - (event->keyval == GDK_Up) || - (event->keyval == GDK_Down) || - (event->keyval == GDK_Left) || - (event->keyval == GDK_Right) || - (event->keyval == GDK_Page_Up) || - (event->keyval == GDK_Page_Down) || - (event->keyval == GDK_Home) || - (event->keyval == GDK_End) || - (event->keyval == GDK_Tab) || - (event->keyval == GDK_KP_Tab) || - (event->keyval == GDK_ISO_Left_Tab)) + (event->keyval == GDK_KEY_F6) || + (event->keyval == GDK_KEY_F10) || + (event->keyval == GDK_KEY_Shift_L) || + (event->keyval == GDK_KEY_Shift_R) || + (event->keyval == GDK_KEY_Control_L) || + (event->keyval == GDK_KEY_Control_R) || + (event->keyval == GDK_KEY_Escape) || + (event->keyval == GDK_KEY_Up) || + (event->keyval == GDK_KEY_Down) || + (event->keyval == GDK_KEY_Left) || + (event->keyval == GDK_KEY_Right) || + (event->keyval == GDK_KEY_Page_Up) || + (event->keyval == GDK_KEY_Page_Down) || + (event->keyval == GDK_KEY_Home) || + (event->keyval == GDK_KEY_End) || + (event->keyval == GDK_KEY_Tab) || + (event->keyval == GDK_KEY_KP_Tab) || + (event->keyval == GDK_KEY_ISO_Left_Tab)) { if (event->type == GDK_KEY_PRESS) return conv_keypress_common(gtkconv, event); @@ -2662,7 +2669,7 @@ } static void -start_anim(GtkObject *obj, PidginConversation *gtkconv) +start_anim(GtkWidget *widget, PidginConversation *gtkconv) { int delay; @@ -2835,7 +2842,7 @@ } static void -stop_anim(GtkObject *obj, PidginConversation *gtkconv) +stop_anim(GtkWidget *widget, PidginConversation *gtkconv) { if (gtkconv->u.im->icon_timer != 0) g_source_remove(gtkconv->u.im->icon_timer); @@ -2857,7 +2864,7 @@ } static gboolean -icon_menu(GtkObject *obj, GdkEventButton *e, PidginConversation *gtkconv) +icon_menu(GtkWidget *widget, GdkEventButton *e, PidginConversation *gtkconv) { static GtkWidget *menu = NULL; PurpleConversation *conv; @@ -4658,13 +4665,22 @@ GdkRectangle oneline; int height, diff; int pad_top, pad_inside, pad_bottom; - int total_height = (gtkconv->imhtml->allocation.height + gtkconv->entry->allocation.height); - int max_height = total_height / 2; + int total_height; + int max_height; int min_lines = purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/minimum_entry_lines"); int min_height; gboolean interior_focus; int focus_width; - + GtkAllocation imhtml_allocation; + GtkAllocation entry_allocation; + GtkAllocation lower_hbox_allocation; + + gtk_widget_get_allocation(gtkconv->imhtml, &imhtml_allocation); + gtk_widget_get_allocation(gtkconv->entry, &entry_allocation); + gtk_widget_get_allocation(gtkconv->lower_hbox, &lower_hbox_allocation); + total_height = imhtml_allocation.height + entry_allocation.height; + max_height = total_height / 2; + pad_top = gtk_text_view_get_pixels_above_lines(GTK_TEXT_VIEW(gtkconv->entry)); pad_bottom = gtk_text_view_get_pixels_below_lines(GTK_TEXT_VIEW(gtkconv->entry)); pad_inside = gtk_text_view_get_pixels_inside_wrap(GTK_TEXT_VIEW(gtkconv->entry)); @@ -4697,12 +4713,12 @@ if (!interior_focus) height += 2 * focus_width; - diff = height - gtkconv->entry->allocation.height; + diff = height - entry_allocation.height; if (ABS(diff) < oneline.height / 2) return FALSE; gtk_widget_set_size_request(gtkconv->lower_hbox, -1, - diff + gtkconv->lower_hbox->allocation.height); + diff + lower_hbox_allocation.height); return FALSE; } @@ -4749,7 +4765,7 @@ if(prpl_info->set_chat_topic == NULL) { gtk_editable_set_editable(GTK_EDITABLE(gtkchat->topic_text), FALSE); } else { - g_signal_connect(GTK_OBJECT(gtkchat->topic_text), "activate", + g_signal_connect(GTK_WIDGET(gtkchat->topic_text), "activate", G_CALLBACK(topic_callback), gtkconv); } @@ -4924,7 +4940,7 @@ gtk_widget_modify_base(gtkconv->quickfind.entry, GTK_STATE_NORMAL, NULL); gtk_imhtml_search_clear(GTK_IMHTML(gtkconv->imhtml)); - gtk_widget_hide_all(gtkconv->quickfind.container); + gtk_widget_hide(gtkconv->quickfind.container); gtk_widget_grab_focus(gtkconv->entry); return TRUE; @@ -4934,8 +4950,8 @@ quickfind_process_input(GtkWidget *entry, GdkEventKey *event, PidginConversation *gtkconv) { switch (event->keyval) { - case GDK_Return: - case GDK_KP_Enter: + case GDK_KEY_Return: + case GDK_KEY_KP_Enter: if (gtk_imhtml_search_find(GTK_IMHTML(gtkconv->imhtml), gtk_entry_get_text(GTK_ENTRY(entry)))) { gtk_widget_modify_base(gtkconv->quickfind.entry, GTK_STATE_NORMAL, NULL); } else { @@ -4946,7 +4962,7 @@ gtk_widget_modify_base(gtkconv->quickfind.entry, GTK_STATE_NORMAL, &col); } break; - case GDK_Escape: + case GDK_KEY_Escape: pidgin_conv_end_quickfind(gtkconv); break; default: @@ -5189,8 +5205,10 @@ PurpleAccount *convaccount = purple_conversation_get_account(conv); PurpleConnection *gc = purple_account_get_connection(convaccount); PurplePluginProtocolInfo *prpl_info = gc ? PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl) : NULL; - - if (sd->target == gdk_atom_intern("PURPLE_BLIST_NODE", FALSE)) + GdkAtom target = gtk_selection_data_get_target(sd); + const guchar *data = gtk_selection_data_get_data(sd); + + if (target == gdk_atom_intern("PURPLE_BLIST_NODE", FALSE)) { PurpleBlistNode *n = NULL; PurpleBuddy *b; @@ -5198,7 +5216,7 @@ PurpleAccount *buddyaccount; const char *buddyname; - n = *(PurpleBlistNode **)sd->data; + n = *(PurpleBlistNode **) data; if (PURPLE_BLIST_NODE_IS_CONTACT(n)) b = purple_contact_get_priority_buddy((PurpleContact*)n); @@ -5246,16 +5264,17 @@ pidgin_conv_window_switch_gtkconv(win, gtkconv); } - gtk_drag_finish(dc, TRUE, (dc->action == GDK_ACTION_MOVE), t); - } - else if (sd->target == gdk_atom_intern("application/x-im-contact", FALSE)) + gtk_drag_finish(dc, TRUE, + gdk_drag_context_get_actions(dc) == GDK_ACTION_MOVE, t); + } + else if (target == gdk_atom_intern("application/x-im-contact", FALSE)) { char *protocol = NULL; char *username = NULL; PurpleAccount *account; PidginConversation *gtkconv; - if (pidgin_parse_x_im_contact((const char *)sd->data, FALSE, &account, + if (pidgin_parse_x_im_contact((const char *) data, FALSE, &account, &protocol, &username, NULL)) { if (account == NULL) @@ -5286,12 +5305,14 @@ g_free(username); g_free(protocol); - gtk_drag_finish(dc, TRUE, (dc->action == GDK_ACTION_MOVE), t); - } - else if (sd->target == gdk_atom_intern("text/uri-list", FALSE)) { + gtk_drag_finish(dc, TRUE, + gdk_drag_context_get_actions(dc) == GDK_ACTION_MOVE, t); + } + else if (target == gdk_atom_intern("text/uri-list", FALSE)) { if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) pidgin_dnd_file_manage(sd, convaccount, purple_conversation_get_name(conv)); - gtk_drag_finish(dc, TRUE, (dc->action == GDK_ACTION_MOVE), t); + gtk_drag_finish(dc, TRUE, + gdk_drag_context_get_actions(dc) == GDK_ACTION_MOVE, t); } else gtk_drag_finish(dc, FALSE, FALSE, t); @@ -5697,21 +5718,28 @@ GdkEventButton *btn_event = (GdkEventButton*) event; PurpleConversation *conv = data; char *buddyname; - + gchar *name; + + g_object_get(G_OBJECT(tag), "name", &name, NULL); + /* strlen("BUDDY " or "HILIT ") == 6 */ - g_return_val_if_fail((tag->name != NULL) - && (strlen(tag->name) > 6), FALSE); - - buddyname = (tag->name) + 6; - + g_return_val_if_fail((name != NULL) && (strlen(name) > 6), FALSE); + + buddyname = name + 6; + + if (btn_event->button == 1 && event->type == GDK_2BUTTON_PRESS) { chat_do_im(PIDGIN_CONVERSATION(conv), buddyname); + g_free(name); + return TRUE; } else if (btn_event->button == 2 && event->type == GDK_2BUTTON_PRESS) { chat_do_info(PIDGIN_CONVERSATION(conv), buddyname); + g_free(name); + return TRUE; } else if (btn_event->button == 3 && event->type == GDK_BUTTON_PRESS) { @@ -5733,10 +5761,14 @@ btn_event->button, btn_event->time); + g_free(name); + /* Don't propagate the event any further */ return TRUE; } } + + g_free(name); } return FALSE; @@ -6863,7 +6895,7 @@ if (title != markup) g_free(markup); - if (!GTK_WIDGET_REALIZED(gtkconv->tab_label)) + if (!gtk_widget_get_realized(gtkconv->tab_label)) gtk_widget_realize(gtkconv->tab_label); accessibility_obj = gtk_widget_get_accessible(gtkconv->tab_cont); @@ -7238,11 +7270,14 @@ { gint pane_x, pane_y, x_rel; PidginConversation *gtkconv; - - gdk_window_get_origin(win->notebook->window, &pane_x, &pane_y); + GtkAllocation allocation; + + gtk_widget_get_allocation(gtkconv->infopane, &allocation); + gdk_window_get_origin(gtk_widget_get_window(win->notebook), + &pane_x, &pane_y); x_rel = x - pane_x; gtkconv = pidgin_conv_window_get_active_gtkconv(win); - return (x_rel > gtkconv->infopane->allocation.x + gtkconv->infopane->allocation.width / 2); + return (x_rel > allocation.x + allocation.width / 2); } int @@ -7260,7 +7295,7 @@ notebook = GTK_NOTEBOOK(win->notebook); - gdk_window_get_origin(win->notebook->window, &nb_x, &nb_y); + gdk_window_get_origin(gtk_widget_get_window(win->notebook), &nb_x, &nb_y); x_rel = x - nb_x; y_rel = y - nb_y; @@ -7270,30 +7305,32 @@ count = gtk_notebook_get_n_pages(GTK_NOTEBOOK(notebook)); for (i = 0; i < count; i++) { - + GtkAllocation allocation; + + gtk_widget_get_allocation(tab, &allocation); page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), i); tab = gtk_notebook_get_tab_label(GTK_NOTEBOOK(notebook), page); /* Make sure the tab is not hidden beyond an arrow */ - if (!GTK_WIDGET_DRAWABLE(tab) && gtk_notebook_get_show_tabs(notebook)) + if (!gtk_widget_is_drawable(tab) && gtk_notebook_get_show_tabs(notebook)) continue; if (horiz) { - if (x_rel >= tab->allocation.x - PIDGIN_HIG_BOX_SPACE && - x_rel <= tab->allocation.x + tab->allocation.width + PIDGIN_HIG_BOX_SPACE) { + if (x_rel >= allocation.x - PIDGIN_HIG_BOX_SPACE && + x_rel <= allocation.x + allocation.width + PIDGIN_HIG_BOX_SPACE) { page_num = i; - if (to_right && x_rel >= tab->allocation.x + tab->allocation.width/2) + if (to_right && x_rel >= allocation.x + allocation.width/2) *to_right = TRUE; break; } } else { - if (y_rel >= tab->allocation.y - PIDGIN_HIG_BOX_SPACE && - y_rel <= tab->allocation.y + tab->allocation.height + PIDGIN_HIG_BOX_SPACE) { + if (y_rel >= allocation.y - PIDGIN_HIG_BOX_SPACE && + y_rel <= allocation.y + allocation.height + PIDGIN_HIG_BOX_SPACE) { page_num = i; - if (to_right && y_rel >= tab->allocation.y + tab->allocation.height/2) + if (to_right && y_rel >= allocation.y + allocation.height/2) *to_right = TRUE; break; @@ -8383,11 +8420,15 @@ gtk_container_set_border_width(GTK_CONTAINER(warn_close_dialog), 6); gtk_window_set_resizable(GTK_WINDOW(warn_close_dialog), FALSE); - gtk_dialog_set_has_separator(GTK_DIALOG(warn_close_dialog), + + /* TODO: figure out how to set no separator in GTK+ 3.0 */ + /* + gtk_dialog_set_has_separator(GTK_DIALOG(warn_close_dialog), FALSE); - + */ + /* Setup the outside spacing. */ - vbox = GTK_DIALOG(warn_close_dialog)->vbox; + vbox = gtk_dialog_get_content_area(GTK_DIALOG(warn_close_dialog)); gtk_box_set_spacing(GTK_BOX(vbox), 12); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); @@ -8541,7 +8582,7 @@ always be true after a button press. */ if (!gdk_pointer_is_grabbed()) #endif - gdk_pointer_grab(gtkwin->notebook->window, FALSE, + gdk_pointer_grab(gtk_widget_get_window(gtkwin->notebook), FALSE, GDK_BUTTON1_MOTION_MASK | GDK_BUTTON_RELEASE_MASK, NULL, cursor, GDK_CURRENT_TIME); } @@ -8661,19 +8702,22 @@ if (e->button == 1) { int nb_x, nb_y; - + GtkAllocation allocation; + + gtk_widget_get_allocation(gtkconv->infopane_hbox, &allocation); + if (gtkconv->win->in_drag) return TRUE; gtkconv->win->in_predrag = TRUE; gtkconv->win->drag_tab = gtk_notebook_page_num(GTK_NOTEBOOK(gtkconv->win->notebook), gtkconv->tab_cont); - gdk_window_get_origin(gtkconv->infopane_hbox->window, &nb_x, &nb_y); - - gtkconv->win->drag_min_x = gtkconv->infopane_hbox->allocation.x + nb_x; - gtkconv->win->drag_min_y = gtkconv->infopane_hbox->allocation.y + nb_y; - gtkconv->win->drag_max_x = gtkconv->infopane_hbox->allocation.width + gtkconv->win->drag_min_x; - gtkconv->win->drag_max_y = gtkconv->infopane_hbox->allocation.height + gtkconv->win->drag_min_y; + gdk_window_get_origin(gtk_widget_get_window(gtkconv->infopane_hbox), &nb_x, &nb_y); + + gtkconv->win->drag_min_x = allocation.x + nb_x; + gtkconv->win->drag_min_y = allocation.y + nb_y; + gtkconv->win->drag_max_x = allocation.width + gtkconv->win->drag_min_x; + gtkconv->win->drag_max_y = allocation.height + gtkconv->win->drag_min_y; gtkconv->win->drag_motion_signal = g_signal_connect(G_OBJECT(gtkconv->win->notebook), "motion_notify_event", G_CALLBACK(notebook_motion_cb), gtkconv->win); @@ -8716,6 +8760,7 @@ int tab_clicked; GtkWidget *page; GtkWidget *tab; + GtkAllocation allocation; if (e->button == 2 && e->type == GDK_BUTTON_PRESS) { PidginConversation *gtkconv; @@ -8753,7 +8798,7 @@ * Get the relative position of the press event, with regards to * the position of the notebook. */ - gdk_window_get_origin(win->notebook->window, &nb_x, &nb_y); + gdk_window_get_origin(gtk_widget_get_window(win->notebook), &nb_x, &nb_y); /* Reset the min/max x/y */ win->drag_min_x = 0; @@ -8765,10 +8810,12 @@ page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(win->notebook), tab_clicked); tab = gtk_notebook_get_tab_label(GTK_NOTEBOOK(win->notebook), page); - win->drag_min_x = tab->allocation.x + nb_x; - win->drag_min_y = tab->allocation.y + nb_y; - win->drag_max_x = tab->allocation.width + win->drag_min_x; - win->drag_max_y = tab->allocation.height + win->drag_min_y; + gtk_widget_get_allocation(tab, &allocation); + + win->drag_min_x = allocation.x + nb_x; + win->drag_min_y = allocation.y + nb_y; + win->drag_max_x = allocation.width + win->drag_min_x; + win->drag_max_y = allocation.height + win->drag_min_y; /* Make sure the click occurred in the tab. */ if (e->x_root < win->drag_min_x || @@ -9005,12 +9052,15 @@ close_conv_cb(NULL, gtkconv); } +/* TODO: I don't know if this doable in GTK+ 3.0 */ +#if 0 static gboolean right_click_menu_cb(GtkNotebook *notebook, GdkEventButton *event, PidginWindow *win) { - GtkWidget *item, *menu; + GtkWidget *item; PidginConversation *gtkconv; - + GtkWidget *menu = gtk_notebook_get_menu + if (event->type != GDK_BUTTON_PRESS || event->button != 3) return FALSE; @@ -9056,6 +9106,7 @@ return FALSE; } +#endif static void remove_edit_entry(PidginConversation *gtkconv, GtkWidget *entry) @@ -9077,7 +9128,7 @@ static gboolean alias_key_press_cb(GtkWidget *widget, GdkEventKey *event, gpointer user_data) { - if (event->keyval == GDK_Escape) { + if (event->keyval == GDK_KEY_Escape) { remove_edit_entry(user_data, widget); return TRUE; } @@ -9122,7 +9173,7 @@ PurpleConversation *conv = gtkconv->active_conv; const char *text = NULL; - if (!GTK_WIDGET_VISIBLE(gtkconv->infopane)) { + if (!gtk_widget_get_visible(gtkconv->infopane)) { /* There's already an entry for alias. Let's not create another one. */ return FALSE; } @@ -9284,14 +9335,14 @@ static gboolean gtk_conv_configure_cb(GtkWidget *w, GdkEventConfigure *event, gpointer data) { int x, y; - if (GTK_WIDGET_VISIBLE(w)) + if (gtk_widget_get_visible(w)) gtk_window_get_position(GTK_WINDOW(w), &x, &y); else return FALSE; /* carry on normally */ /* Workaround for GTK+ bug # 169811 - "configure_event" is fired * when the window is being maximized */ - if (gdk_window_get_state(w->window) & GDK_WINDOW_STATE_MAXIMIZED) + if (gdk_window_get_state(gtk_widget_get_window(w)) & GDK_WINDOW_STATE_MAXIMIZED) return FALSE; /* don't save off-screen positioning */ @@ -9319,7 +9370,7 @@ /* if the window exists, is hidden, we're saving positions, and the * position is sane... */ if (win && win->window && - !GTK_WIDGET_VISIBLE(win->window) && conv_width != 0) { + !gtk_widget_get_visible(win->window) && conv_width != 0) { #ifdef _WIN32 /* only override window manager placement on Windows */ /* ...check position is on screen... */ @@ -9404,9 +9455,13 @@ gtk_notebook_set_show_tabs(GTK_NOTEBOOK(win->notebook), FALSE); gtk_notebook_set_show_border(GTK_NOTEBOOK(win->notebook), TRUE); + /* TODO: figure out how to add custom stuff to the right-click menu in + GtkNotebook in GTK+ 3.0 */ + /* g_signal_connect(G_OBJECT(win->notebook), "button-press-event", G_CALLBACK(right_click_menu_cb), win); - + */ + gtk_widget_show(win->notebook); g_signal_connect(G_OBJECT(win->notebook), "switch_page", @@ -9497,7 +9552,7 @@ void pidgin_conv_window_raise(PidginWindow *win) { - gdk_window_raise(GDK_WINDOW(win->window->window)); + gdk_window_raise(GDK_WINDOW(gtk_widget_get_window(win->window))); } void @@ -9672,7 +9727,7 @@ g_signal_connect(G_OBJECT(ebox), "enter-notify-event", G_CALLBACK(gtkconv_tab_set_tip), gtkconv); - if (gtkconv->tab_label->parent == NULL) { + if (gtk_widget_get_parent(gtkconv->tab_label) == NULL) { /* Pack if it's a new widget */ gtk_box_pack_start(GTK_BOX(gtkconv->tabby), first, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(gtkconv->tabby), gtkconv->tab_label, TRUE, TRUE, 0); @@ -9693,9 +9748,8 @@ gtk_notebook_set_tab_label(GTK_NOTEBOOK(win->notebook), gtkconv->tab_cont, ebox); } - gtk_notebook_set_tab_label_packing(GTK_NOTEBOOK(win->notebook), gtkconv->tab_cont, - !tabs_side && !angle, - TRUE, GTK_PACK_START); + g_object_set(G_OBJECT(win->notebook), "expand", !tabs_side && !angle, + "fill", TRUE, NULL); if (pidgin_conv_window_get_gtkconv_count(win) == 1) gtk_notebook_set_show_tabs(GTK_NOTEBOOK(win->notebook), @@ -9807,7 +9861,7 @@ for (l = pidgin_conv_windows_get_list(); l != NULL; l = l->next) { win = l->data; - if (gdkwin == win->window->window) + if (gdkwin == gtk_widget_get_window(win->window)) return win; } @@ -9929,14 +9983,14 @@ PurpleConversationType type = purple_conversation_get_type(conv->active_conv); GList *all; - if (GTK_WIDGET_VISIBLE(w)) + if (gtk_widget_get_visible(w)) gtk_window_get_position(GTK_WINDOW(w), &x, &y); else return FALSE; /* carry on normally */ /* Workaround for GTK+ bug # 169811 - "configure_event" is fired * when the window is being maximized */ - if (gdk_window_get_state(w->window) & GDK_WINDOW_STATE_MAXIMIZED) + if (gdk_window_get_state(gtk_widget_get_window(w)) & GDK_WINDOW_STATE_MAXIMIZED) return FALSE; /* don't save off-screen positioning */ diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/gtkdebug.c --- a/pidgin/gtkdebug.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/gtkdebug.c Thu Nov 25 22:30:18 2010 +0000 @@ -128,7 +128,7 @@ static gboolean configure_cb(GtkWidget *w, GdkEventConfigure *event, DebugWindow *win) { - if (GTK_WIDGET_VISIBLE(w)) { + if (gtk_widget_get_visible(w)) { purple_prefs_set_int(PIDGIN_PREFS_ROOT "/debug/width", event->width); purple_prefs_set_int(PIDGIN_PREFS_ROOT "/debug/height", event->height); } @@ -622,8 +622,8 @@ static void regex_key_release_cb(GtkWidget *w, GdkEventKey *e, DebugWindow *win) { - if(e->keyval == GDK_Return && - GTK_WIDGET_IS_SENSITIVE(win->filter) && + if(e->keyval == GDK_KEY_Return && + gtk_widget_is_sensitive(win->filter) && !gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(win->filter))) { gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(win->filter), TRUE); @@ -925,7 +925,7 @@ gtk_container_add(GTK_CONTAINER(item), gtk_label_new(_("Level "))); gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(item)); - win->filterlevel = gtk_combo_box_new_text(); + win->filterlevel = gtk_combo_box_text_new(); item = gtk_tool_item_new(); #if GTK_CHECK_VERSION(2,12,0) gtk_widget_set_tooltip_text(win->filterlevel, _("Select the debug filter level.")); @@ -935,12 +935,12 @@ gtk_container_add(GTK_CONTAINER(item), win->filterlevel); gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(item)); - gtk_combo_box_append_text(GTK_COMBO_BOX(win->filterlevel), _("All")); - gtk_combo_box_append_text(GTK_COMBO_BOX(win->filterlevel), _("Misc")); - gtk_combo_box_append_text(GTK_COMBO_BOX(win->filterlevel), _("Info")); - gtk_combo_box_append_text(GTK_COMBO_BOX(win->filterlevel), _("Warning")); - gtk_combo_box_append_text(GTK_COMBO_BOX(win->filterlevel), _("Error ")); - gtk_combo_box_append_text(GTK_COMBO_BOX(win->filterlevel), _("Fatal Error")); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(win->filterlevel), _("All")); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(win->filterlevel), _("Misc")); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(win->filterlevel), _("Info")); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(win->filterlevel), _("Warning")); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(win->filterlevel), _("Error ")); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(win->filterlevel), _("Fatal Error")); gtk_combo_box_set_active(GTK_COMBO_BOX(win->filterlevel), purple_prefs_get_int(PIDGIN_PREFS_ROOT "/debug/filterlevel")); #ifdef USE_REGEX diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/gtkdialogs.c --- a/pidgin/gtkdialogs.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/gtkdialogs.c Thu Nov 25 22:30:18 2010 +0000 @@ -452,7 +452,7 @@ button = pidgin_dialog_add_button(GTK_DIALOG(win), GTK_STOCK_CLOSE, G_CALLBACK(destroy_win), win); - GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); + gtk_widget_set_can_default(button, TRUE); gtk_widget_grab_default(button); gtk_widget_show_all(win); @@ -899,12 +899,15 @@ gtk_container_set_border_width (GTK_CONTAINER(window), PIDGIN_HIG_BOX_SPACE); gtk_window_set_resizable(GTK_WINDOW(window), FALSE); - gtk_dialog_set_has_separator(GTK_DIALOG(window), FALSE); - gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(window)->vbox), PIDGIN_HIG_BORDER); - gtk_container_set_border_width (GTK_CONTAINER(GTK_DIALOG(window)->vbox), PIDGIN_HIG_BOX_SPACE); + /* TODO: figure out how to set no separator in a dialog in GTK+ 3.0 */ + /*gtk_dialog_set_has_separator(GTK_DIALOG(window), FALSE);*/ + gtk_box_set_spacing(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(window))), + PIDGIN_HIG_BORDER); + gtk_container_set_border_width (GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(window))), + PIDGIN_HIG_BOX_SPACE); hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(window)->vbox), hbox); + gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(window))), hbox); img = gtk_image_new_from_stock(PIDGIN_STOCK_DIALOG_COOL, gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_HUGE)); gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/gtkdialogs.h --- a/pidgin/gtkdialogs.h Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/gtkdialogs.h Thu Nov 25 22:30:18 2010 +0000 @@ -66,6 +66,6 @@ gtk_window_set_type_hint(GTK_WINDOW(x), GDK_WINDOW_TYPE_HINT_DIALOG) #endif -#define PIDGIN_WINDOW_ICONIFIED(x) (gdk_window_get_state(GTK_WIDGET(x)->window) & GDK_WINDOW_STATE_ICONIFIED) +#define PIDGIN_WINDOW_ICONIFIED(x) (gdk_window_get_state(gtk_widget_get_window(GTK_WIDGET(x))) & GDK_WINDOW_STATE_ICONIFIED) #endif /* _PIDGINDIALOGS_H_ */ diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/gtkdnd-hints.c --- a/pidgin/gtkdnd-hints.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/gtkdnd-hints.c Thu Nov 25 22:30:18 2010 +0000 @@ -57,28 +57,34 @@ static GtkWidget * dnd_hints_init_window(const gchar *fname) { + /* TODO: this is likely very broken right now, I think this needs to be + Cairo-ified */ GdkPixbuf *pixbuf; - GdkPixmap *pixmap; - GdkBitmap *bitmap; + /*GdkPixmap *pixmap;*/ + /*GdkBitmap *bitmap;*/ GtkWidget *pix; GtkWidget *win; pixbuf = gdk_pixbuf_new_from_file(fname, NULL); g_return_val_if_fail(pixbuf, NULL); + /* gdk_pixbuf_render_pixmap_and_mask(pixbuf, &pixmap, &bitmap, 128); g_object_unref(G_OBJECT(pixbuf)); - - gtk_widget_push_colormap(gdk_rgb_get_colormap()); + */ + + /*gtk_widget_push_colormap(gdk_rgb_get_colormap());*/ win = gtk_window_new(GTK_WINDOW_POPUP); - pix = gtk_image_new_from_pixmap(pixmap, bitmap); + pix = gtk_image_new_from_pixbuf(pixbuf); gtk_container_add(GTK_CONTAINER(win), pix); - gtk_widget_shape_combine_mask(win, bitmap, 0, 0); - gtk_widget_pop_colormap(); + /*gtk_widget_shape_combine_mask(win, bitmap, 0, 0); + gtk_widget_pop_colormap();*/ + /* g_object_unref(G_OBJECT(pixmap)); g_object_unref(G_OBJECT(bitmap)); - + */ + gtk_widget_show_all(pix); return win; @@ -88,17 +94,22 @@ get_widget_coords(GtkWidget *w, gint *x1, gint *y1, gint *x2, gint *y2) { gint ox, oy, width, height; - - if (w->parent && w->parent->window == w->window) + GtkWidget *parent = gtk_widget_get_parent(w); + + if (parent && gtk_widget_get_window(parent) == gtk_widget_get_window(w)) { - get_widget_coords(w->parent, &ox, &oy, NULL, NULL); - height = w->allocation.height; - width = w->allocation.width; + GtkAllocation allocation; + + gtk_widget_get_allocation(w, &allocation); + get_widget_coords(parent, &ox, &oy, NULL, NULL); + height = allocation.height; + width = allocation.width; } else { - gdk_window_get_origin(w->window, &ox, &oy); - gdk_drawable_get_size(w->window, &width, &height); + gdk_window_get_origin(gtk_widget_get_window(w), &ox, &oy); + width = gdk_window_get_width(gtk_widget_get_window(w)); + height = gdk_window_get_height(gtk_widget_get_window(w)); } if (x1) *x1 = ox; @@ -171,10 +182,13 @@ { gint x1, x2, y1, y2; gint x = 0, y = 0; + GtkAllocation allocation; + + gtk_widget_get_allocation(widget, &allocation); get_widget_coords(widget, &x1, &y1, &x2, &y2); - x1 += widget->allocation.x; x2 += widget->allocation.x; - y1 += widget->allocation.y; y2 += widget->allocation.y; + x1 += allocation.x; x2 += allocation.x; + y1 += allocation.y; y2 += allocation.y; switch (horiz) { diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/gtkdocklet-gtk.c --- a/pidgin/gtkdocklet-gtk.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/gtkdocklet-gtk.c Thu Nov 25 22:30:18 2010 +0000 @@ -51,7 +51,10 @@ docklet_gtk_status_update_icon(PurpleStatusPrimitive status, gboolean connecting, gboolean pending) { const gchar *icon_name = NULL; + gboolean blinking; + g_object_get(G_OBJECT(docklet), "blinking", &blinking, NULL); + switch (status) { case PURPLE_STATUS_OFFLINE: icon_name = PIDGIN_STOCK_TRAY_OFFLINE; @@ -83,9 +86,9 @@ } if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/docklet/blink")) { - gtk_status_icon_set_blinking(docklet, (pending && !connecting)); - } else if (gtk_status_icon_get_blinking(docklet)) { - gtk_status_icon_set_blinking(docklet, FALSE); + g_object_set(G_OBJECT(docklet), "blinking", pending && !connecting, NULL); + } else if (blinking) { + g_object_set(G_OBJECT(docklet), "blinking", FALSE, NULL); } } @@ -93,9 +96,9 @@ docklet_gtk_status_set_tooltip(gchar *tooltip) { if (tooltip) { - gtk_status_icon_set_tooltip(docklet, tooltip); + gtk_status_icon_set_tooltip_text(docklet, tooltip); } else { - gtk_status_icon_set_tooltip(docklet, NULL); + gtk_status_icon_set_tooltip_text(docklet, NULL); } } diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/gtkdocklet.c --- a/pidgin/gtkdocklet.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/gtkdocklet.c Thu Nov 25 22:30:18 2010 +0000 @@ -315,19 +315,21 @@ static void docklet_toggle_mute(GtkWidget *toggle, void *data) { - purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/sound/mute", GTK_CHECK_MENU_ITEM(toggle)->active); + purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/sound/mute", + gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(toggle))); } static void docklet_toggle_blink(GtkWidget *toggle, void *data) { - purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/docklet/blink", GTK_CHECK_MENU_ITEM(toggle)->active); + purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/docklet/blink", + gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(toggle))); } static void docklet_toggle_blist(GtkWidget *toggle, void *data) { - purple_blist_set_visible(GTK_CHECK_MENU_ITEM(toggle)->active); + purple_blist_set_visible(gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(toggle))); } #ifdef _WIN32 @@ -593,7 +595,7 @@ static void -plugin_act(GtkObject *obj, PurplePluginAction *pam) +plugin_act(GtkWidget *widget, PurplePluginAction *pam) { if (pam && pam->callback) pam->callback(pam); diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/gtkidle.c --- a/pidgin/gtkidle.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/gtkidle.c Thu Nov 25 22:30:18 2010 +0000 @@ -107,14 +107,16 @@ int event_base, error_base; if (has_extension == -1) - has_extension = XScreenSaverQueryExtension(GDK_DISPLAY(), &event_base, &error_base); + has_extension = XScreenSaverQueryExtension(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), + &event_base, &error_base); if (has_extension) { if (mit_info == NULL) mit_info = XScreenSaverAllocInfo(); - XScreenSaverQueryInfo(GDK_DISPLAY(), GDK_ROOT_WINDOW(), mit_info); + XScreenSaverQueryInfo(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), + GDK_ROOT_WINDOW(), mit_info); return (mit_info->idle) / 1000; } else diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/gtkimhtml.c --- a/pidgin/gtkimhtml.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/gtkimhtml.c Thu Nov 25 22:30:18 2010 +0000 @@ -410,7 +410,7 @@ /* Don't scroll here if we're in the middle of a smooth scroll */ if (scroll && imhtml->scroll_time == NULL && - GTK_WIDGET_REALIZED(imhtml)) + gtk_widget_get_realized(GTK_WIDGET(imhtml))) gtk_imhtml_scroll_to_end(imhtml, FALSE); } @@ -499,18 +499,22 @@ gtk_imhtml_tip_paint (GtkIMHtml *imhtml) { PangoLayout *layout; + cairo_t *cr = gdk_cairo_create(GDK_DRAWABLE(imhtml->tip_window)); g_return_val_if_fail(GTK_IS_IMHTML(imhtml), FALSE); layout = gtk_widget_create_pango_layout(imhtml->tip_window, imhtml->tip); - gtk_paint_flat_box (imhtml->tip_window->style, imhtml->tip_window->window, - GTK_STATE_NORMAL, GTK_SHADOW_OUT, NULL, imhtml->tip_window, + gtk_paint_flat_box (gtk_widget_get_style(imhtml->tip_window), + cr, + GTK_STATE_NORMAL, GTK_SHADOW_OUT, imhtml->tip_window, "tooltip", 0, 0, -1, -1); - gtk_paint_layout (imhtml->tip_window->style, imhtml->tip_window->window, GTK_STATE_NORMAL, - FALSE, NULL, imhtml->tip_window, NULL, 4, 4, layout); - + gtk_paint_layout (gtk_widget_get_style(imhtml->tip_window), + cr, + GTK_STATE_NORMAL, TRUE, imhtml->tip_window, NULL, 4, 4, layout); + + cairo_destroy(cr); g_object_unref(layout); return FALSE; } @@ -522,12 +526,15 @@ PangoFontMetrics *font_metrics; PangoLayout *layout; PangoFont *font; - + GtkStyle *style = gtk_widget_get_style(imhtml->tip_window); + GtkAllocation allocation; gint gap, x, y, h, w, scr_w, baseline_skip; g_return_val_if_fail(GTK_IS_IMHTML(imhtml), FALSE); - if (!imhtml->tip || !GTK_WIDGET_DRAWABLE (GTK_WIDGET(imhtml))) { + gtk_widget_get_allocation(GTK_WIDGET(imhtml), &allocation); + + if (!imhtml->tip || !gtk_widget_is_drawable(GTK_WIDGET(imhtml))) { imhtml->tip_timer = 0; return FALSE; } @@ -551,11 +558,10 @@ gtk_widget_ensure_style (imhtml->tip_window); layout = gtk_widget_create_pango_layout(imhtml->tip_window, imhtml->tip); font = pango_context_load_font(pango_layout_get_context(layout), - imhtml->tip_window->style->font_desc); + style->font_desc); if (font == NULL) { - char *tmp = pango_font_description_to_string( - imhtml->tip_window->style->font_desc); + char *tmp = pango_font_description_to_string(style->font_desc); purple_debug(PURPLE_DEBUG_ERROR, "gtk_imhtml_tip", "pango_context_load_font() couldn't load font: '%s'\n", @@ -580,8 +586,8 @@ h = 8 + baseline_skip; gdk_window_get_pointer (NULL, &x, &y, NULL); - if (GTK_WIDGET_NO_WINDOW (GTK_WIDGET(imhtml))) - y += GTK_WIDGET(imhtml)->allocation.y; + if ((!gtk_widget_get_has_window(GTK_WIDGET(imhtml)))) + y += allocation.y; scr_w = gdk_screen_width(); @@ -621,7 +627,7 @@ oldprelit_tag = GTK_IMHTML(imhtml)->prelit_tag; - gdk_window_get_pointer(GTK_WIDGET(imhtml)->window, NULL, NULL, NULL); + gdk_window_get_pointer(gtk_widget_get_window(GTK_WIDGET(imhtml)), NULL, NULL, NULL); gtk_text_view_window_to_buffer_coords(GTK_TEXT_VIEW(imhtml), GTK_TEXT_WINDOW_WIDGET, event->x, event->y, &x, &y); gtk_text_view_get_iter_at_location(GTK_TEXT_VIEW(imhtml), &iter, x, y); @@ -749,6 +755,8 @@ return FALSE; } +/* TODO: I think this can be removed for GTK+ 3.0... */ +#if 0 static gint gtk_imhtml_expose_event (GtkWidget *widget, GdkEventExpose *event) @@ -776,7 +784,8 @@ gdk_color_parse(GTK_IMHTML(widget)->edit.background, &gcolor); gdk_cairo_set_source_color(cr, &gcolor); } else { - gdk_cairo_set_source_color(cr, &(widget->style->base[GTK_WIDGET_STATE(widget)])); + gdk_cairo_set_source_color(cr, + &(gtk_widget_get_style(widget)->base[gtk_widget_get_state(widget)])); } cairo_rectangle(cr, @@ -882,6 +891,7 @@ return FALSE; } +#endif static void paste_unformatted_cb(GtkMenuItem *menu, GtkIMHtml *imhtml) @@ -1158,11 +1168,12 @@ { char *text; GtkIMHtml *imhtml = data; - + gint length = gtk_selection_data_get_length(selection_data); + if (!gtk_text_view_get_editable(GTK_TEXT_VIEW(imhtml))) return; - if (imhtml->wbfo || selection_data->length <= 0) { + if (imhtml->wbfo || length <= 0) { gtk_clipboard_request_text(clipboard, paste_plaintext_received_cb, imhtml); return; } else { @@ -1186,13 +1197,13 @@ } #endif - text = g_malloc(selection_data->length + 1); - memcpy(text, selection_data->data, selection_data->length); + text = g_malloc(length + 1); + memcpy(text, gtk_selection_data_get_data(selection_data), length); /* Make sure the paste data is null-terminated. Given that * we're passed length (but assume later that it is * null-terminated), this seems sensible to me. */ - text[selection_data->length] = '\0'; + text[length] = '\0'; } #ifdef _WIN32 @@ -1203,10 +1214,10 @@ } #endif - if (selection_data->length >= 2 && + if (length >= 2 && (*(guint16 *)text == 0xfeff || *(guint16 *)text == 0xfffe)) { /* This is UTF-16 */ - char *utf8 = utf16_to_utf8_with_bom_check(text, selection_data->length); + char *utf8 = utf16_to_utf8_with_bom_check(text, length); g_free(text); text = utf8; if (!text) { @@ -1567,7 +1578,8 @@ gobject_class->finalize = gtk_imhtml_finalize; widget_class->drag_motion = gtk_text_view_drag_motion; - widget_class->expose_event = gtk_imhtml_expose_event; + /* TODO: I _think_ this should be removed for GTK+ 3.0 */ + /*widget_class->expose_event = gtk_imhtml_expose_event;*/ parent_size_allocate = widget_class->size_allocate; widget_class->size_allocate = gtk_imhtml_size_allocate; parent_style_set = widget_class->style_set; @@ -1629,20 +1641,20 @@ TRUE, G_PARAM_READABLE)); binding_set = gtk_binding_set_by_class (parent_class); - gtk_binding_entry_add_signal (binding_set, GDK_b, GDK_CONTROL_MASK, "format_function_toggle", 1, G_TYPE_INT, GTK_IMHTML_BOLD); - gtk_binding_entry_add_signal (binding_set, GDK_i, GDK_CONTROL_MASK, "format_function_toggle", 1, G_TYPE_INT, GTK_IMHTML_ITALIC); - gtk_binding_entry_add_signal (binding_set, GDK_u, GDK_CONTROL_MASK, "format_function_toggle", 1, G_TYPE_INT, GTK_IMHTML_UNDERLINE); - gtk_binding_entry_add_signal (binding_set, GDK_plus, GDK_CONTROL_MASK, "format_function_toggle", 1, G_TYPE_INT, GTK_IMHTML_GROW); - gtk_binding_entry_add_signal (binding_set, GDK_equal, GDK_CONTROL_MASK, "format_function_toggle", 1, G_TYPE_INT, GTK_IMHTML_GROW); - gtk_binding_entry_add_signal (binding_set, GDK_minus, GDK_CONTROL_MASK, "format_function_toggle", 1, G_TYPE_INT, GTK_IMHTML_SHRINK); + gtk_binding_entry_add_signal (binding_set, GDK_KEY_b, GDK_CONTROL_MASK, "format_function_toggle", 1, G_TYPE_INT, GTK_IMHTML_BOLD); + gtk_binding_entry_add_signal (binding_set, GDK_KEY_i, GDK_CONTROL_MASK, "format_function_toggle", 1, G_TYPE_INT, GTK_IMHTML_ITALIC); + gtk_binding_entry_add_signal (binding_set, GDK_KEY_u, GDK_CONTROL_MASK, "format_function_toggle", 1, G_TYPE_INT, GTK_IMHTML_UNDERLINE); + gtk_binding_entry_add_signal (binding_set, GDK_KEY_plus, GDK_CONTROL_MASK, "format_function_toggle", 1, G_TYPE_INT, GTK_IMHTML_GROW); + gtk_binding_entry_add_signal (binding_set, GDK_KEY_equal, GDK_CONTROL_MASK, "format_function_toggle", 1, G_TYPE_INT, GTK_IMHTML_GROW); + gtk_binding_entry_add_signal (binding_set, GDK_KEY_minus, GDK_CONTROL_MASK, "format_function_toggle", 1, G_TYPE_INT, GTK_IMHTML_SHRINK); binding_set = gtk_binding_set_by_class(klass); - gtk_binding_entry_add_signal (binding_set, GDK_r, GDK_CONTROL_MASK, "format_function_clear", 0); - gtk_binding_entry_add_signal (binding_set, GDK_KP_Enter, 0, "message_send", 0); - gtk_binding_entry_add_signal (binding_set, GDK_Return, 0, "message_send", 0); - gtk_binding_entry_add_signal (binding_set, GDK_z, GDK_CONTROL_MASK, "undo", 0); - gtk_binding_entry_add_signal (binding_set, GDK_z, GDK_CONTROL_MASK | GDK_SHIFT_MASK, "redo", 0); - gtk_binding_entry_add_signal (binding_set, GDK_F14, 0, "undo", 0); - gtk_binding_entry_add_signal(binding_set, GDK_v, GDK_CONTROL_MASK | GDK_SHIFT_MASK, "paste", 1, G_TYPE_STRING, "text"); + gtk_binding_entry_add_signal (binding_set, GDK_KEY_r, GDK_CONTROL_MASK, "format_function_clear", 0); + gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Enter, 0, "message_send", 0); + gtk_binding_entry_add_signal (binding_set, GDK_KEY_Return, 0, "message_send", 0); + gtk_binding_entry_add_signal (binding_set, GDK_KEY_z, GDK_CONTROL_MASK, "undo", 0); + gtk_binding_entry_add_signal (binding_set, GDK_KEY_z, GDK_CONTROL_MASK | GDK_SHIFT_MASK, "redo", 0); + gtk_binding_entry_add_signal (binding_set, GDK_KEY_F14, 0, "undo", 0); + gtk_binding_entry_add_signal(binding_set, GDK_KEY_v, GDK_CONTROL_MASK | GDK_SHIFT_MASK, "paste", 1, G_TYPE_STRING, "text"); } static void gtk_imhtml_init (GtkIMHtml *imhtml) @@ -1869,13 +1881,13 @@ /* can't accept any of the offered targets */ } else { GtkWidget *source_widget; - suggested_action = context->suggested_action; + suggested_action = gdk_drag_context_get_suggested_action(context); source_widget = gtk_drag_get_source_widget (context); if (source_widget == widget) { /* Default to MOVE, unless the user has * pressed ctrl or alt to affect available actions */ - if ((context->actions & GDK_ACTION_MOVE) != 0) + if ((gdk_drag_context_get_actions(context) & GDK_ACTION_MOVE) != 0) suggested_action = GDK_ACTION_MOVE; } } @@ -1907,20 +1919,21 @@ { gchar **links; gchar *link; - char *text = (char *)sd->data; + char *text = (char *) gtk_selection_data_get_data(sd); GtkTextMark *mark = gtk_text_buffer_get_insert(imhtml->text_buffer); GtkTextIter iter; gint i = 0; + gint length = gtk_selection_data_get_length(sd); gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, mark); - if(gtk_imhtml_get_editable(imhtml) && sd->data){ + if(gtk_imhtml_get_editable(imhtml) && text){ switch (info) { case GTK_IMHTML_DRAG_URL: /* TODO: Is it really ok to change sd->data...? */ - purple_str_strip_char((char *)sd->data, '\r'); - - links = g_strsplit((char *)sd->data, "\n", 0); + purple_str_strip_char(text, '\r'); + + links = g_strsplit(text, "\n", 0); while((link = links[i]) != NULL){ if (gtk_imhtml_is_protocol(link)) { gchar *label; @@ -1959,8 +1972,8 @@ * See also the comment on text/html here: * http://mail.gnome.org/archives/gtk-devel-list/2001-September/msg00114.html */ - if (sd->length >= 2 && !g_utf8_validate(text, sd->length - 1, NULL)) { - utf8 = utf16_to_utf8_with_bom_check(text, sd->length); + if (length >= 2 && !g_utf8_validate(text, length - 1, NULL)) { + utf8 = utf16_to_utf8_with_bom_check(text, length); if (!utf8) { purple_debug_warning("gtkimhtml", "g_convert from UTF-16 failed in drag_rcv_cb\n"); @@ -1989,7 +2002,8 @@ gtk_drag_finish(dc, FALSE, FALSE, t); return; } - gtk_drag_finish(dc, TRUE, (dc->action == GDK_ACTION_MOVE), t); + gtk_drag_finish(dc, TRUE, + (gdk_drag_context_get_actions(dc) == GDK_ACTION_MOVE), t); } else { gtk_drag_finish(dc, FALSE, FALSE, t); } @@ -2520,8 +2534,8 @@ static gboolean smooth_scroll_cb(gpointer data) { GtkIMHtml *imhtml = data; - GtkAdjustment *adj = GTK_TEXT_VIEW(imhtml)->vadjustment; - gdouble max_val = adj->upper - adj->page_size; + GtkAdjustment *adj = gtk_text_view_get_vadjustment(GTK_TEXT_VIEW(imhtml)); + gdouble max_val = gtk_adjustment_get_upper(adj) - gtk_adjustment_get_page_size(adj); gdouble scroll_val = gtk_adjustment_get_value(adj) + ((max_val - gtk_adjustment_get_value(adj)) / 3); g_return_val_if_fail(imhtml->scroll_time != NULL, FALSE); @@ -2544,9 +2558,10 @@ static gboolean scroll_idle_cb(gpointer data) { GtkIMHtml *imhtml = data; - GtkAdjustment *adj = GTK_TEXT_VIEW(imhtml)->vadjustment; + GtkAdjustment *adj = gtk_text_view_get_vadjustment(GTK_TEXT_VIEW(imhtml)); if(adj) { - gtk_adjustment_set_value(adj, adj->upper - adj->page_size); + gtk_adjustment_set_value(adj, gtk_adjustment_get_upper(adj) - + gtk_adjustment_get_page_size(adj)); } imhtml->scroll_src = 0; return FALSE; @@ -4186,9 +4201,14 @@ for (l = tags; l; l = l->next) { GtkTextTag *tag = l->data; - - if (tag->name && !strncmp(tag->name, prefix, len)) + gchar *name; + + g_object_get(G_OBJECT(tag), "name", &name, NULL); + + if (name && !strncmp(name, prefix, len)) gtk_text_buffer_remove_tag(imhtml->text_buffer, tag, i, e); + + g_free(name); } g_slist_free(tags); @@ -4204,10 +4224,15 @@ for (l = tags; l; l = l->next) { GtkTextTag *tag = l->data; - - if (tag->name && !strncmp(tag->name, prefix, len)) + gchar *name; + + g_object_get(G_OBJECT(tag), "name", &name, NULL); + + if (name && !strncmp(name, prefix, len)) gtk_text_buffer_remove_tag(imhtml->text_buffer, tag, &iter, e); - } + + g_free(name); + } g_slist_free(tags); } @@ -4327,11 +4352,16 @@ gtk_text_iter_begins_tag(start, tag) && /* the tag starts with the selection */ (!gtk_text_iter_has_tag(end, tag) || /* the tag ends within the selection */ gtk_text_iter_ends_tag(end, tag))) { + gchar *name; + + g_object_get(G_OBJECT(tag), "name", &name, NULL); gtk_text_buffer_remove_tag(imhtml->text_buffer, tag, start, end); - if (tag->name && - strncmp(tag->name, "LINK ", 5) == 0 && imhtml->edit.link) { + + if (name && strncmp(name, "LINK ", 5) == 0 && imhtml->edit.link) { gtk_imhtml_toggle_link(imhtml, NULL); } + + g_free(name); } } g_slist_free(tags); @@ -4553,27 +4583,32 @@ for (l = tags; l != NULL; l = l->next) { GtkTextTag *tag = GTK_TEXT_TAG(l->data); - - if (tag->name) { - if (strcmp(tag->name, "BOLD") == 0) + gchar *name; + + g_object_get(G_OBJECT(tag), "name", &name, NULL); + + if (name) { + if (strcmp(name, "BOLD") == 0) imhtml->edit.bold = TRUE; - else if (strcmp(tag->name, "ITALICS") == 0) + else if (strcmp(name, "ITALICS") == 0) imhtml->edit.italic = TRUE; - else if (strcmp(tag->name, "UNDERLINE") == 0) + else if (strcmp(name, "UNDERLINE") == 0) imhtml->edit.underline = TRUE; - else if (strcmp(tag->name, "STRIKE") == 0) + else if (strcmp(name, "STRIKE") == 0) imhtml->edit.strike = TRUE; - else if (strncmp(tag->name, "FORECOLOR ", 10) == 0) - imhtml->edit.forecolor = g_strdup(&(tag->name)[10]); - else if (strncmp(tag->name, "BACKCOLOR ", 10) == 0) - imhtml->edit.backcolor = g_strdup(&(tag->name)[10]); - else if (strncmp(tag->name, "FONT FACE ", 10) == 0) - imhtml->edit.fontface = g_strdup(&(tag->name)[10]); - else if (strncmp(tag->name, "FONT SIZE ", 10) == 0) - imhtml->edit.fontsize = strtol(&(tag->name)[10], NULL, 10); - else if ((strncmp(tag->name, "LINK ", 5) == 0) && !gtk_text_iter_is_end(&iter)) + else if (strncmp(name, "FORECOLOR ", 10) == 0) + imhtml->edit.forecolor = g_strdup(&(name)[10]); + else if (strncmp(name, "BACKCOLOR ", 10) == 0) + imhtml->edit.backcolor = g_strdup(&(name)[10]); + else if (strncmp(name, "FONT FACE ", 10) == 0) + imhtml->edit.fontface = g_strdup(&(name)[10]); + else if (strncmp(name, "FONT SIZE ", 10) == 0) + imhtml->edit.fontsize = strtol(&(name)[10], NULL, 10); + else if ((strncmp(name, "LINK ", 5) == 0) && !gtk_text_iter_is_end(&iter)) imhtml->edit.link = tag; } + + g_free(name); } g_slist_free(tags); @@ -4864,6 +4899,8 @@ gtk_text_buffer_end_user_action(imhtml->text_buffer); } +/* TODO: I think this can be removed for GTK+ 3.0... */ +#if 0 static gboolean image_expose(GtkWidget *widget, GdkEventExpose *event, gpointer user_data) { @@ -4871,9 +4908,10 @@ return TRUE; } +#endif /* In case the smiley gets removed from the imhtml before it gets removed from the queue */ -static void animated_smiley_destroy_cb(GtkObject *widget, GtkIMHtml *imhtml) +static void animated_smiley_destroy_cb(GtkWidget *widget, GtkIMHtml *imhtml) { GList *l = imhtml->animations->head; while (l) { @@ -4966,8 +5004,10 @@ * images, and ensures that they are handled by the image * itself, without propagating to the textview and causing * a complete refresh */ + /* TODO: I think this should be removed for GTK+ 3.0? g_signal_connect(G_OBJECT(icon), "expose-event", G_CALLBACK(image_expose), NULL); - + */ + gtk_widget_show(icon); if (ebox) gtk_container_add(GTK_CONTAINER(ebox), icon); @@ -5068,23 +5108,30 @@ static const gchar *tag_to_html_start(GtkTextTag *tag) { - const gchar *name; static gchar buf[1024]; - - name = tag->name; + gchar *name; + + g_object_get(G_OBJECT(tag), "name", &name, NULL); g_return_val_if_fail(name != NULL, ""); if (strcmp(name, "BOLD") == 0) { + g_free(name); return ""; } else if (strcmp(name, "ITALICS") == 0) { + g_free(name); return ""; } else if (strcmp(name, "UNDERLINE") == 0) { - return ""; + g_free(name); + return ""; } else if (strcmp(name, "STRIKE") == 0) { - return ""; + g_free(name); + return ""; } else if (strncmp(name, "LINK ", 5) == 0) { char *tmp = g_object_get_data(G_OBJECT(tag), "link_url"); - if (tmp) { + + g_free(name); + + if (tmp) { g_snprintf(buf, sizeof(buf), "", tmp); buf[sizeof(buf)-1] = '\0'; return buf; @@ -5093,19 +5140,30 @@ } } else if (strncmp(name, "FORECOLOR ", 10) == 0) { g_snprintf(buf, sizeof(buf), "", &name[10]); - return buf; + + g_free(name); + + return buf; } else if (strncmp(name, "BACKCOLOR ", 10) == 0) { g_snprintf(buf, sizeof(buf), "", &name[10]); - return buf; + g_free(name); + + return buf; } else if (strncmp(name, "BACKGROUND ", 10) == 0) { g_snprintf(buf, sizeof(buf), "", &name[11]); - return buf; + g_free(name); + + return buf; } else if (strncmp(name, "FONT FACE ", 10) == 0) { g_snprintf(buf, sizeof(buf), "", &name[10]); - return buf; + g_free(name); + + return buf; } else if (strncmp(name, "FONT SIZE ", 10) == 0) { g_snprintf(buf, sizeof(buf), "", &name[10]); - return buf; + g_free(name); + + return buf; } else { char *str = buf; gboolean isset; @@ -5167,38 +5225,49 @@ } g_snprintf(str, sizeof(buf) - (str - buf), "'>"); - + g_free(name); + return (empty ? "" : buf); } } static const gchar *tag_to_html_end(GtkTextTag *tag) { - const gchar *name; - - name = tag->name; + gchar *name; + + g_object_get(G_OBJECT(tag), "name", &name, NULL); g_return_val_if_fail(name != NULL, ""); if (strcmp(name, "BOLD") == 0) { + g_free(name); return ""; } else if (strcmp(name, "ITALICS") == 0) { - return ""; + g_free(name); + return ""; } else if (strcmp(name, "UNDERLINE") == 0) { - return ""; + g_free(name); + return ""; } else if (strcmp(name, "STRIKE") == 0) { - return ""; + g_free(name); + return ""; } else if (strncmp(name, "LINK ", 5) == 0) { - return ""; + g_free(name); + return ""; } else if (strncmp(name, "FORECOLOR ", 10) == 0) { - return ""; + g_free(name); + return ""; } else if (strncmp(name, "BACKCOLOR ", 10) == 0) { - return ""; + g_free(name); + return ""; } else if (strncmp(name, "BACKGROUND ", 10) == 0) { - return ""; + g_free(name); + return ""; } else if (strncmp(name, "FONT FACE ", 10) == 0) { - return ""; + g_free(name); + return ""; } else if (strncmp(name, "FONT SIZE ", 10) == 0) { - return ""; + g_free(name); + return ""; } else { const char *props[] = {"weight-set", "foreground-set", "background-set", "size-set", "underline-set", NULL}; @@ -5210,6 +5279,8 @@ return ""; } + g_free(name); + return ""; } } diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/gtkimhtmltoolbar.c --- a/pidgin/gtkimhtmltoolbar.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/gtkimhtmltoolbar.c Thu Nov 25 22:30:18 2010 +0000 @@ -124,11 +124,15 @@ { GtkFontSelection *sel; - sel = GTK_FONT_SELECTION(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog)->fontsel); - gtk_widget_hide_all(gtk_widget_get_parent(sel->size_entry)); - gtk_widget_show_all(sel->family_list); - gtk_widget_show(gtk_widget_get_parent(sel->family_list)); - gtk_widget_show(gtk_widget_get_parent(gtk_widget_get_parent(sel->family_list))); + sel = GTK_FONT_SELECTION( + gtk_font_selection_dialog_get_font_selection(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog))); + gtk_widget_hide(gtk_widget_get_parent( + gtk_font_selection_get_size_entry(sel))); + gtk_widget_show_all(gtk_font_selection_get_family_list(sel)); + gtk_widget_show(gtk_widget_get_parent( + gtk_font_selection_get_family_list(sel))); + gtk_widget_show(gtk_widget_get_parent(gtk_widget_get_parent( + gtk_font_selection_get_family_list(sel)))); } static void @@ -191,10 +195,12 @@ g_signal_connect(G_OBJECT(toolbar->font_dialog), "delete_event", G_CALLBACK(destroy_toolbar_font), toolbar); - g_signal_connect(G_OBJECT(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog)->ok_button), "clicked", - G_CALLBACK(apply_font), toolbar->font_dialog); - g_signal_connect(G_OBJECT(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog)->cancel_button), "clicked", - G_CALLBACK(cancel_toolbar_font), toolbar); + g_signal_connect(G_OBJECT( + gtk_font_selection_dialog_get_ok_button(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog))), + "clicked", G_CALLBACK(apply_font), toolbar->font_dialog); + g_signal_connect(G_OBJECT( + gtk_font_selection_dialog_get_cancel_button(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog))), + "clicked", G_CALLBACK(cancel_toolbar_font), toolbar); g_signal_connect_after(G_OBJECT(toolbar->font_dialog), "realize", G_CALLBACK(realize_toolbar_font), toolbar); } @@ -253,9 +259,12 @@ char *color = gtk_imhtml_get_current_forecolor(GTK_IMHTML(toolbar->imhtml)); if (!toolbar->fgcolor_dialog) { - + GtkWidget *ok_button; + GtkWidget *cancel_button; + toolbar->fgcolor_dialog = gtk_color_selection_dialog_new(_("Select Text Color")); - colorsel = GTK_COLOR_SELECTION_DIALOG(toolbar->fgcolor_dialog)->colorsel; + colorsel = + gtk_color_selection_dialog_get_color_selection(GTK_COLOR_SELECTION_DIALOG(toolbar->fgcolor_dialog)); if (color) { gdk_color_parse(color, &fgcolor); gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel), &fgcolor); @@ -264,12 +273,14 @@ g_object_set_data(G_OBJECT(colorsel), "purple_toolbar", toolbar); + g_object_get(G_OBJECT(toolbar->fgcolor_dialog), "ok-button", &ok_button, NULL); + g_object_get(G_OBJECT(toolbar->fgcolor_dialog), "cancel-button", + &cancel_button, NULL); g_signal_connect(G_OBJECT(toolbar->fgcolor_dialog), "delete_event", G_CALLBACK(destroy_toolbar_fgcolor), toolbar); - g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(toolbar->fgcolor_dialog)->ok_button), "clicked", - G_CALLBACK(do_fgcolor), colorsel); - g_signal_connect(G_OBJECT (GTK_COLOR_SELECTION_DIALOG(toolbar->fgcolor_dialog)->cancel_button), "clicked", - G_CALLBACK(cancel_toolbar_fgcolor), toolbar); + g_signal_connect(G_OBJECT(ok_button), "clicked", G_CALLBACK(do_fgcolor), colorsel); + g_signal_connect(G_OBJECT(cancel_button), "clicked", + G_CALLBACK(cancel_toolbar_fgcolor), toolbar); } gtk_window_present(GTK_WINDOW(toolbar->fgcolor_dialog)); } else { @@ -333,10 +344,14 @@ char *color = gtk_imhtml_get_current_backcolor(GTK_IMHTML(toolbar->imhtml)); if (!toolbar->bgcolor_dialog) { - + GtkWidget *ok_button; + GtkWidget *cancel_button; + toolbar->bgcolor_dialog = gtk_color_selection_dialog_new(_("Select Background Color")); - colorsel = GTK_COLOR_SELECTION_DIALOG(toolbar->bgcolor_dialog)->colorsel; - if (color) { + colorsel = + gtk_color_selection_dialog_get_color_selection(GTK_COLOR_SELECTION_DIALOG(toolbar->fgcolor_dialog)); + + if (color) { gdk_color_parse(color, &bgcolor); gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel), &bgcolor); g_free(color); @@ -344,11 +359,14 @@ g_object_set_data(G_OBJECT(colorsel), "purple_toolbar", toolbar); + g_object_get(G_OBJECT(toolbar->bgcolor_dialog), "ok-button", &ok_button, NULL); + g_object_get(G_OBJECT(toolbar->bgcolor_dialog), "cancel-button", + &cancel_button, NULL); g_signal_connect(G_OBJECT(toolbar->bgcolor_dialog), "delete_event", G_CALLBACK(destroy_toolbar_bgcolor), toolbar); - g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(toolbar->bgcolor_dialog)->ok_button), "clicked", - G_CALLBACK(do_bgcolor), colorsel); - g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(toolbar->bgcolor_dialog)->cancel_button), "clicked", + g_signal_connect(G_OBJECT(ok_button), "clicked", + G_CALLBACK(do_bgcolor), colorsel); + g_signal_connect(G_OBJECT(cancel_button), "clicked", G_CALLBACK(cancel_toolbar_bgcolor), toolbar); } @@ -722,7 +740,7 @@ static gboolean smiley_dialog_input_cb(GtkWidget *dialog, GdkEvent *event, GtkIMHtmlToolbar *toolbar) { - if ((event->type == GDK_KEY_PRESS && event->key.keyval == GDK_Escape) || + if ((event->type == GDK_KEY_PRESS && event->key.keyval == GDK_KEY_Escape) || (event->type == GDK_BUTTON_PRESS && event->button.button == 1)) { close_smiley_dialog(toolbar); @@ -1095,19 +1113,21 @@ { GtkWidget *widget = GTK_WIDGET(data); GtkRequisition menu_req; - gint ythickness = widget->style->ythickness; + GtkAllocation allocation; + gint ythickness = gtk_widget_get_style(widget)->ythickness; int savy; + gtk_widget_get_allocation(widget, &allocation); gtk_widget_size_request(GTK_WIDGET (menu), &menu_req); - gdk_window_get_origin(widget->window, x, y); - *x += widget->allocation.x; - *y += widget->allocation.y + widget->allocation.height; + gdk_window_get_origin(gtk_widget_get_window(widget), x, y); + *x += allocation.x; + *y += allocation.y + allocation.height; savy = *y; pidgin_menu_position_func_helper(menu, x, y, push_in, data); if (savy > *y + ythickness + 1) - *y -= widget->allocation.height; + *y -= allocation.height; } static gboolean @@ -1199,7 +1219,7 @@ if (event->button != 3) return FALSE; - wide = GTK_WIDGET_VISIBLE(toolbar->bold); + wide = gtk_widget_get_visible(toolbar->bold); menu = gtk_menu_new(); item = gtk_menu_item_new_with_mnemonic(wide ? _("Group Items") : _("Ungroup Items")); @@ -1294,7 +1314,7 @@ static void button_visibility_changed(GtkWidget *button, gpointer dontcare, GtkWidget *item) { - if (GTK_WIDGET_VISIBLE(button)) + if (gtk_widget_get_visible(button)) gtk_widget_hide(item); else gtk_widget_show(item); @@ -1303,7 +1323,7 @@ static void button_sensitiveness_changed(GtkWidget *button, gpointer dontcare, GtkWidget *item) { - gtk_widget_set_sensitive(item, GTK_WIDGET_IS_SENSITIVE(button)); + gtk_widget_set_sensitive(item, gtk_widget_get_sensitive(button)); } static void @@ -1326,10 +1346,10 @@ gconstpointer value, gpointer toolbar) { if (value) { - gtk_widget_hide_all(g_object_get_data(G_OBJECT(toolbar), "lean-view")); + gtk_widget_hide(g_object_get_data(G_OBJECT(toolbar), "lean-view")); gtk_widget_show_all(g_object_get_data(G_OBJECT(toolbar), "wide-view")); } else { - gtk_widget_hide_all(g_object_get_data(G_OBJECT(toolbar), "wide-view")); + gtk_widget_hide(g_object_get_data(G_OBJECT(toolbar), "wide-view")); gtk_widget_show_all(g_object_get_data(G_OBJECT(toolbar), "lean-view")); } } diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/gtklog.c --- a/pidgin/gtklog.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/gtklog.c Thu Nov 25 22:30:18 2010 +0000 @@ -582,8 +582,10 @@ gtk_dialog_add_button(GTK_DIALOG(lv->window), _("_Browse logs folder"), GTK_RESPONSE_HELP); #endif gtk_container_set_border_width (GTK_CONTAINER(lv->window), PIDGIN_HIG_BOX_SPACE); - gtk_dialog_set_has_separator(GTK_DIALOG(lv->window), FALSE); - gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(lv->window)->vbox), 0); + /* TODO: is it possible to set this in GTK+ 3.0? + gtk_dialog_set_has_separator(GTK_DIALOG(lv->window), FALSE); + */ + gtk_box_set_spacing(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(lv->window))), 0); g_signal_connect(G_OBJECT(lv->window), "response", G_CALLBACK(destroy_cb), ht); gtk_window_set_role(GTK_WINDOW(lv->window), "log_viewer"); @@ -592,11 +594,12 @@ if (icon != NULL) { title_box = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); gtk_container_set_border_width(GTK_CONTAINER(title_box), PIDGIN_HIG_BOX_SPACE); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(lv->window)->vbox), title_box, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(lv->window))), + title_box, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(title_box), icon, FALSE, FALSE, 0); } else - title_box = GTK_DIALOG(lv->window)->vbox; + title_box = gtk_dialog_get_content_area(GTK_DIALOG(lv->window)); /* Label ************/ lv->label = gtk_label_new(NULL); @@ -611,7 +614,8 @@ /* Pane *************/ pane = gtk_hpaned_new(); gtk_container_set_border_width(GTK_CONTAINER(pane), PIDGIN_HIG_BOX_SPACE); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(lv->window)->vbox), pane, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(lv->window))), + pane, TRUE, TRUE, 0); /* List *************/ sw = gtk_scrolled_window_new (NULL, NULL); @@ -649,7 +653,8 @@ gtk_label_set_markup(GTK_LABEL(size_label), text); /* gtk_paned_add1(GTK_PANED(pane), size_label); */ gtk_misc_set_alignment(GTK_MISC(size_label), 0, 0); - gtk_box_pack_end(GTK_BOX(GTK_DIALOG(lv->window)->vbox), size_label, FALSE, FALSE, 0); + gtk_box_pack_end(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(lv->window))), + size_label, FALSE, FALSE, 0); g_free(sz_txt); g_free(text); } diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/gtkmain.c --- a/pidgin/gtkmain.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/gtkmain.c Thu Nov 25 22:30:18 2010 +0000 @@ -490,7 +490,7 @@ { Display *xdisplay; - xdisplay = GDK_DISPLAY(); + xdisplay = GDK_DISPLAY_XDISPLAY(gdk_display_get_default()); sn_display = sn_display_new(xdisplay, sn_error_trap_push, sn_error_trap_pop); diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/gtkmedia.c --- a/pidgin/gtkmedia.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/gtkmedia.c Thu Nov 25 22:30:18 2010 +0000 @@ -442,9 +442,9 @@ window_id = GDK_WINDOW_HWND(priv->remote_video->window); #elif defined(HAVE_X11) if (data->participant == NULL) - window_id = GDK_WINDOW_XWINDOW(priv->local_video->window); + window_id = GDK_WINDOW_XWINDOW(gtk_widget_get_window(priv->local_video)); else - window_id = GDK_WINDOW_XWINDOW(priv->remote_video->window); + window_id = GDK_WINDOW_XWINDOW(gtk_widget_get_window(priv->remote_video)); #else # error "Unsupported windowing system" #endif diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/gtkmenutray.c --- a/pidgin/gtkmenutray.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/gtkmenutray.c Thu Nov 25 22:30:18 2010 +0000 @@ -44,7 +44,7 @@ * Item Stuff *****************************************************************************/ static void -pidgin_menu_tray_select(GtkItem *item) { +pidgin_menu_tray_select(GtkMenuItem *widget) { /* this may look like nothing, but it's really overriding the * GtkMenuItem's select function so that it doesn't get highlighted like * a normal menu item would. @@ -52,7 +52,7 @@ } static void -pidgin_menu_tray_deselect(GtkItem *item) { +pidgin_menu_tray_deselect(GtkMenuItem *widget) { /* Probably not necessary, but I'd rather be safe than sorry. We're * overridding the select, so it makes sense to override deselect as well. */ @@ -116,7 +116,7 @@ static void pidgin_menu_tray_class_init(PidginMenuTrayClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS(klass); - GtkItemClass *item_class = GTK_ITEM_CLASS(klass); + GtkMenuItemClass *menu_item_class = GTK_MENU_ITEM_CLASS(klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass); GParamSpec *pspec; @@ -125,8 +125,8 @@ object_class->finalize = pidgin_menu_tray_finalize; object_class->get_property = pidgin_menu_tray_get_property; - item_class->select = pidgin_menu_tray_select; - item_class->deselect = pidgin_menu_tray_deselect; + menu_item_class->select = pidgin_menu_tray_select; + menu_item_class->deselect = pidgin_menu_tray_deselect; widget_class->map = pidgin_menu_tray_map; @@ -207,7 +207,7 @@ g_return_if_fail(PIDGIN_IS_MENU_TRAY(menu_tray)); g_return_if_fail(GTK_IS_WIDGET(widget)); - if (GTK_WIDGET_NO_WINDOW(widget)) + if (!gtk_widget_get_has_window(widget)) { GtkWidget *event; @@ -254,8 +254,8 @@ * case, we want to set the tooltip on the widget's parent, * not on the widget itself. */ - if (GTK_WIDGET_NO_WINDOW(widget)) - widget = widget->parent; + 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); diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/gtknotify.c --- a/pidgin/gtknotify.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/gtknotify.c Thu Nov 25 22:30:18 2010 +0000 @@ -534,12 +534,18 @@ gtk_container_set_border_width(GTK_CONTAINER(dialog), PIDGIN_HIG_BORDER); gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); + /* TODO: not sure if there is a way to do this in gtk+ 3, or + if we want to... gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); - gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog)->vbox), PIDGIN_HIG_BORDER); - gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), PIDGIN_HIG_BOX_SPACE); + */ + gtk_box_set_spacing(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), + PIDGIN_HIG_BORDER); + gtk_container_set_border_width(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), + PIDGIN_HIG_BOX_SPACE); hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox); + gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), + hbox); if (img != NULL) gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); @@ -775,7 +781,7 @@ } } - if (!GTK_WIDGET_VISIBLE(mail_dialog->dialog)) { + if (!gtk_widget_get_visible(mail_dialog->dialog)) { GdkPixbuf *pixbuf = gtk_widget_render_icon(mail_dialog->dialog, PIDGIN_STOCK_DIALOG_MAIL, gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL), NULL); char *label_text = g_strdup_printf(ngettext("%d new email.", @@ -791,7 +797,7 @@ g_free(label_text); if (pixbuf) g_object_unref(pixbuf); - } else if (!GTK_WIDGET_HAS_FOCUS(mail_dialog->dialog)) + } else if (!gtk_widget_has_focus(mail_dialog->dialog)) pidgin_set_urgent(GTK_WINDOW(mail_dialog->dialog), TRUE); return data; @@ -800,7 +806,7 @@ static gboolean formatted_input_cb(GtkWidget *win, GdkEventKey *event, gpointer data) { - if (event->keyval == GDK_Escape) + if (event->keyval == GDK_KEY_Escape) { purple_notify_close(PURPLE_NOTIFY_FORMATTED, win); @@ -847,7 +853,7 @@ G_CALLBACK(formatted_close_cb), NULL); /* Setup the main vbox */ - vbox = GTK_DIALOG(window)->vbox; + vbox = gtk_dialog_get_content_area(GTK_DIALOG(window)); /* Setup the descriptive label */ primary_esc = g_markup_escape_text(primary, -1); @@ -978,7 +984,7 @@ G_CALLBACK(searchresults_close_cb), data); /* Setup the main vbox */ - vbox = GTK_DIALOG(window)->vbox; + vbox = gtk_dialog_get_content_area(GTK_DIALOG(window)); /* Setup the descriptive label */ primary_esc = (primary != NULL) ? g_markup_escape_text(primary, -1) : NULL; @@ -1516,12 +1522,16 @@ /* Setup the dialog */ gtk_container_set_border_width(GTK_CONTAINER(dialog), PIDGIN_HIG_BOX_SPACE); - gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), PIDGIN_HIG_BOX_SPACE); + gtk_container_set_border_width(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), + PIDGIN_HIG_BOX_SPACE); + /* TODO: not sure if this is possible (or nessesary) in gtk+ 3 gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); - gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog)->vbox), PIDGIN_HIG_BORDER); + */ + gtk_box_set_spacing(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), + PIDGIN_HIG_BORDER); /* Vertical box */ - vbox = GTK_DIALOG(dialog)->vbox; + vbox = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); /* Golden ratio it up! */ gtk_widget_set_size_request(dialog, 550, 400); diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/gtkplugin.c --- a/pidgin/gtkplugin.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/gtkplugin.c Thu Nov 25 22:30:18 2010 +0000 @@ -518,7 +518,7 @@ break; dialog = gtk_dialog_new_with_buttons(PIDGIN_ALERT_TITLE, GTK_WINDOW(d), - GTK_DIALOG_NO_SEPARATOR | GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); if (plugin_pref_dialogs == NULL) @@ -527,7 +527,7 @@ g_hash_table_insert(plugin_pref_dialogs, plug, dialog); g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(pref_dialog_response_cb), plug); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), box); + gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), box); gtk_window_set_role(GTK_WINDOW(dialog), "plugin_config"); gtk_window_set_title(GTK_WINDOW(dialog), _(purple_plugin_get_name(plug))); gtk_widget_show_all(dialog); @@ -562,10 +562,13 @@ pidgin_plugins_paint_tooltip(GtkWidget *tipwindow, gpointer data) { PangoLayout *layout = g_object_get_data(G_OBJECT(tipwindow), "tooltip-plugin"); - gtk_paint_layout(tipwindow->style, tipwindow->window, GTK_STATE_NORMAL, FALSE, - NULL, tipwindow, "tooltip", + cairo_t *cr = gdk_cairo_create(GDK_DRAWABLE(gtk_widget_get_window(tipwindow))); + gtk_paint_layout(gtk_widget_get_style(tipwindow), cr, GTK_STATE_NORMAL, FALSE, + tipwindow, "tooltip", 6, 6, layout); - return TRUE; + cairo_destroy(cr); + + return TRUE; } static gboolean @@ -720,8 +723,9 @@ plugin_dialog = gtk_dialog_new_with_buttons(_("Plugins"), NULL, - GTK_DIALOG_NO_SEPARATOR, + 0, NULL); + pref_button = gtk_dialog_add_button(GTK_DIALOG(plugin_dialog), _("Configure Pl_ugin"), PIDGIN_RESPONSE_CONFIGURE); gtk_dialog_add_button(GTK_DIALOG(plugin_dialog), @@ -733,7 +737,8 @@ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_IN); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(plugin_dialog)->vbox), sw, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(plugin_dialog))), + sw, TRUE, TRUE, 0); ls = gtk_list_store_new(4, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_BOOLEAN); gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(ls), @@ -793,8 +798,8 @@ gtk_expander_set_use_markup(GTK_EXPANDER(expander), TRUE); gtk_widget_set_sensitive(expander, FALSE); gtk_container_add(GTK_CONTAINER(expander), create_details()); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(plugin_dialog)->vbox), expander, - FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(plugin_dialog))), + expander, FALSE, FALSE, 0); g_signal_connect (G_OBJECT (sel), "changed", G_CALLBACK (prefs_plugin_sel), NULL); diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/gtkpounce.c --- a/pidgin/gtkpounce.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/gtkpounce.c Thu Nov 25 22:30:18 2010 +0000 @@ -410,13 +410,15 @@ GtkSelectionData *sd, guint info, guint t, gpointer data) { PidginPounceDialog *dialog; - - if (sd->target == gdk_atom_intern("PURPLE_BLIST_NODE", FALSE)) + GdkAtom target = gtk_selection_data_get_target(sd); + const guchar *sd_data = gtk_selection_data_get_data(sd); + + if (target == gdk_atom_intern("PURPLE_BLIST_NODE", FALSE)) { PurpleBlistNode *node = NULL; PurpleBuddy *buddy; - memcpy(&node, sd->data, sizeof(node)); + memcpy(&node, sd_data, sizeof(node)); if (PURPLE_BLIST_NODE_IS_CONTACT(node)) buddy = purple_contact_get_priority_buddy((PurpleContact *)node); @@ -431,15 +433,15 @@ dialog->account = buddy->account; pidgin_account_option_menu_set_selected(dialog->account_menu, buddy->account); - gtk_drag_finish(dc, TRUE, (dc->action == GDK_ACTION_MOVE), t); + gtk_drag_finish(dc, TRUE, (gdk_drag_context_get_actions(dc) == GDK_ACTION_MOVE), t); } - else if (sd->target == gdk_atom_intern("application/x-im-contact", FALSE)) + else if (target == gdk_atom_intern("application/x-im-contact", FALSE)) { char *protocol = NULL; char *username = NULL; PurpleAccount *account; - if (pidgin_parse_x_im_contact((const char *)sd->data, FALSE, &account, + if (pidgin_parse_x_im_contact((const char *) sd_data, FALSE, &account, &protocol, &username, NULL)) { if (account == NULL) @@ -461,7 +463,7 @@ g_free(username); g_free(protocol); - gtk_drag_finish(dc, TRUE, (dc->action == GDK_ACTION_MOVE), t); + gtk_drag_finish(dc, TRUE, (gdk_drag_context_get_actions(dc) == GDK_ACTION_MOVE), t); } } @@ -540,7 +542,7 @@ G_CALLBACK(delete_win_cb), dialog); /* Create the parent vbox for everything. */ - vbox1 = GTK_DIALOG(window)->vbox; + vbox1 = gtk_dialog_get_content_area(GTK_DIALOG(window)); /* Create the vbox that will contain all the prefs stuff. */ vbox2 = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); @@ -1018,7 +1020,7 @@ static gboolean pounces_manager_configure_cb(GtkWidget *widget, GdkEventConfigure *event, PouncesManager *dialog) { - if (GTK_WIDGET_VISIBLE(widget)) { + if (gtk_widget_get_visible(widget)) { purple_prefs_set_int(PIDGIN_PREFS_ROOT "/pounces/dialog/width", event->width); purple_prefs_set_int(PIDGIN_PREFS_ROOT "/pounces/dialog/height", event->height); } diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/gtkprefs.c --- a/pidgin/gtkprefs.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/gtkprefs.c Thu Nov 25 22:30:18 2010 +0000 @@ -118,7 +118,7 @@ const char *key, int min, int max, GtkSizeGroup *sg) { GtkWidget *spin; - GtkObject *adjust; + GtkAdjustment *adjust; int val; val = purple_prefs_get_int(key); @@ -864,9 +864,10 @@ theme_dnd_recv(GtkWidget *widget, GdkDragContext *dc, guint x, guint y, GtkSelectionData *sd, guint info, guint t, gpointer user_data) { - gchar *name = g_strchomp((gchar *)sd->data); - - if ((sd->length >= 0) && (sd->format == 8)) { + gchar *name = g_strchomp((gchar *)gtk_selection_data_get_data(sd)); + + if ((gtk_selection_data_get_length(sd) >= 0) + && (gtk_selection_data_get_format(sd) == 8)) { /* Well, it looks like the drag event was cool. * Let's do something with it */ gchar *temp; @@ -2442,7 +2443,7 @@ sound_page(void) { GtkWidget *ret; - GtkWidget *vbox, *vbox2, *sw, *button; + GtkWidget *vbox, *vbox2, *sw, *button, *parent, *parent_parent, *parent_parent_parent; GtkSizeGroup *sg; GtkTreeIter iter; GtkWidget *event_view; @@ -2539,15 +2540,19 @@ sound_changed2_cb, vbox); #endif vbox = pidgin_make_frame(ret, _("Sound Events")); - + parent = gtk_widget_get_parent(vbox); + parent_parent = gtk_widget_get_parent(parent); + parent_parent_parent = gtk_widget_get_parent(parent_parent); + /* The following is an ugly hack to make the frame expand so the * sound events list is big enough to be usable */ - gtk_box_set_child_packing(GTK_BOX(vbox->parent), vbox, TRUE, TRUE, 0, + gtk_box_set_child_packing(GTK_BOX(parent), vbox, TRUE, TRUE, 0, GTK_PACK_START); - gtk_box_set_child_packing(GTK_BOX(vbox->parent->parent), vbox->parent, TRUE, - TRUE, 0, GTK_PACK_START); - gtk_box_set_child_packing(GTK_BOX(vbox->parent->parent->parent), - vbox->parent->parent, TRUE, TRUE, 0, GTK_PACK_START); + gtk_box_set_child_packing(GTK_BOX(parent_parent), + parent, TRUE, TRUE, 0, GTK_PACK_START); + gtk_box_set_child_packing( + GTK_BOX(parent_parent_parent), + parent_parent, TRUE, TRUE, 0, GTK_PACK_START); /* SOUND SELECTION */ sw = gtk_scrolled_window_new(NULL,NULL); diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/gtkprivacy.c --- a/pidgin/gtkprivacy.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/gtkprivacy.c Thu Nov 25 22:30:18 2010 +0000 @@ -243,7 +243,7 @@ gtk_widget_hide(dialog->allow_widget); gtk_widget_hide(dialog->block_widget); - gtk_widget_hide_all(dialog->button_box); + gtk_widget_hide(dialog->button_box); if (new_type == PURPLE_PRIVACY_ALLOW_USERS) { gtk_widget_show(dialog->allow_widget); @@ -371,12 +371,12 @@ dialog->account = pidgin_account_option_menu_get_selected(dropdown); /* Add the drop-down list with the allow/block types. */ - dialog->type_menu = gtk_combo_box_new_text(); + dialog->type_menu = gtk_combo_box_text_new(); gtk_box_pack_start(GTK_BOX(vbox), dialog->type_menu, FALSE, FALSE, 0); gtk_widget_show(dialog->type_menu); for (i = 0; i < menu_entry_count; i++) { - gtk_combo_box_append_text(GTK_COMBO_BOX(dialog->type_menu), + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(dialog->type_menu), _(menu_entries[i].text)); if (menu_entries[i].num == dialog->account->perm_deny) @@ -442,7 +442,7 @@ privacy_dialog = privacy_dialog_new(); gtk_widget_show(privacy_dialog->win); - gdk_window_raise(privacy_dialog->win->window); + gdk_window_raise(gtk_widget_get_window(privacy_dialog->win)); } void diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/gtkrequest.c --- a/pidgin/gtkrequest.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/gtkrequest.c Thu Nov 25 22:30:18 2010 +0000 @@ -105,8 +105,10 @@ #endif if (GTK_IS_DIALOG(cont)) { - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(cont)->action_area), image, FALSE, TRUE, 0); - gtk_box_reorder_child(GTK_BOX(GTK_DIALOG(cont)->action_area), image, 0); + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_action_area(GTK_DIALOG(cont))), + image, FALSE, TRUE, 0); + gtk_box_reorder_child(GTK_BOX(gtk_dialog_get_action_area(GTK_DIALOG(cont))), + image, 0); } else if (GTK_IS_HBOX(cont)) { gtk_misc_set_alignment(GTK_MISC(image), 0, 0); gtk_box_pack_end(GTK_BOX(cont), image, FALSE, TRUE, 0); @@ -263,7 +265,7 @@ { generic_response_start(data); - if (!GTK_WIDGET_HAS_FOCUS(button)) + if (!gtk_widget_has_focus(button)) gtk_widget_grab_focus(button); if (data->cbs[0] != NULL) @@ -359,16 +361,21 @@ /* Setup the dialog */ gtk_container_set_border_width(GTK_CONTAINER(dialog), PIDGIN_HIG_BORDER/2); - gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), PIDGIN_HIG_BORDER/2); + gtk_container_set_border_width(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), + PIDGIN_HIG_BORDER / 2); if (!multiline) gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); + /* TODO: not sure how to do this with GTK+ 3 gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); + */ gtk_dialog_set_default_response(GTK_DIALOG(dialog), 0); - gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog)->vbox), PIDGIN_HIG_BORDER); + gtk_box_set_spacing(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), + PIDGIN_HIG_BORDER); /* Setup the main horizontal box */ hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox); + gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), + hbox); /* Dialog icon. */ img = gtk_image_new_from_stock(PIDGIN_STOCK_DIALOG_QUESTION, @@ -536,14 +543,19 @@ /* Setup the dialog */ gtk_container_set_border_width(GTK_CONTAINER(dialog), PIDGIN_HIG_BORDER/2); - gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), PIDGIN_HIG_BORDER/2); + gtk_container_set_border_width(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), + PIDGIN_HIG_BORDER / 2); gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); - gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); - gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog)->vbox), PIDGIN_HIG_BORDER); + /* TODO: don't know if this is possible with GTK+ 3 + gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); + */ + gtk_box_set_spacing(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), + PIDGIN_HIG_BORDER); /* Setup the main horizontal box */ hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox); + gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), + hbox); /* Dialog icon. */ img = gtk_image_new_from_stock(PIDGIN_STOCK_DIALOG_QUESTION, @@ -658,14 +670,19 @@ /* Setup the dialog */ gtk_container_set_border_width(GTK_CONTAINER(dialog), PIDGIN_HIG_BORDER/2); - gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), PIDGIN_HIG_BORDER/2); + gtk_container_set_border_width(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), + PIDGIN_HIG_BORDER / 2); gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); - gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); - gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog)->vbox), PIDGIN_HIG_BORDER); + /* TODO: this is probably not supported by GTK+ 3 + gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); + */ + gtk_box_set_spacing(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), + PIDGIN_HIG_BORDER); /* Setup the main horizontal box */ hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox); + gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), + hbox); /* Dialog icon. */ if (icon_data) { @@ -736,8 +753,8 @@ if (default_action == PURPLE_DEFAULT_ACTION_NONE) { - GTK_WIDGET_SET_FLAGS(img, GTK_CAN_DEFAULT); - GTK_WIDGET_SET_FLAGS(img, GTK_CAN_FOCUS); + gtk_widget_set_can_default(img, TRUE); + gtk_widget_set_can_focus(img, TRUE); gtk_widget_grab_focus(img); gtk_widget_grab_default(img); } else @@ -982,12 +999,12 @@ if (num_labels > 5) { - widget = gtk_combo_box_new_text(); + widget = gtk_combo_box_text_new(); for (l = labels; l != NULL; l = l->next) { const char *text = l->data; - gtk_combo_box_append_text(GTK_COMBO_BOX(widget), text); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widget), text); } gtk_combo_box_set_active(GTK_COMBO_BOX(widget), @@ -1264,12 +1281,12 @@ /* Cancel button */ button = pidgin_dialog_add_button(GTK_DIALOG(win), text_to_stock(cancel_text), G_CALLBACK(multifield_cancel_cb), data); - GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); + gtk_widget_set_can_default(button, TRUE); /* OK button */ button = pidgin_dialog_add_button(GTK_DIALOG(win), text_to_stock(ok_text), G_CALLBACK(multifield_ok_cb), data); data->ok_button = button; - GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); + gtk_widget_set_can_default(button, TRUE); gtk_window_set_default(GTK_WINDOW(win), button); pidgin_widget_decorate_account(hbox, account); diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/gtkroomlist.c --- a/pidgin/gtkroomlist.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/gtkroomlist.c Thu Nov 25 22:30:18 2010 +0000 @@ -359,8 +359,10 @@ int current_height, max_width; int max_text_width; GtkTextDirection dir = gtk_widget_get_direction(GTK_WIDGET(grl->tree)); - - style = grl->tipwindow->style; + cairo_t *cr = + gdk_cairo_create(GDK_DRAWABLE(gtk_widget_get_window(grl->tipwindow))); + + style = gtk_widget_get_style(grl->tipwindow); max_text_width = MAX(grl->tip_width, grl->tip_name_width); max_width = TOOLTIP_BORDER + SMALL_SPACE + max_text_width + TOOLTIP_BORDER; @@ -368,26 +370,28 @@ current_height = 12; if (dir == GTK_TEXT_DIR_RTL) { - gtk_paint_layout(style, grl->tipwindow->window, GTK_STATE_NORMAL, FALSE, - NULL, grl->tipwindow, "tooltip", + gtk_paint_layout(style, cr, GTK_STATE_NORMAL, FALSE, + grl->tipwindow, "tooltip", max_width - (TOOLTIP_BORDER + SMALL_SPACE) - PANGO_PIXELS(600000), current_height, grl->tip_name_layout); } else { - gtk_paint_layout (style, grl->tipwindow->window, GTK_STATE_NORMAL, FALSE, - NULL, grl->tipwindow, "tooltip", + gtk_paint_layout (style, cr, GTK_STATE_NORMAL, FALSE, + grl->tipwindow, "tooltip", TOOLTIP_BORDER + SMALL_SPACE, current_height, grl->tip_name_layout); } if (dir != GTK_TEXT_DIR_RTL) { - gtk_paint_layout (style, grl->tipwindow->window, GTK_STATE_NORMAL, FALSE, - NULL, grl->tipwindow, "tooltip", + gtk_paint_layout (style, cr, GTK_STATE_NORMAL, FALSE, + grl->tipwindow, "tooltip", TOOLTIP_BORDER + SMALL_SPACE, current_height + grl->tip_name_height, grl->tip_layout); } else { - gtk_paint_layout(style, grl->tipwindow->window, GTK_STATE_NORMAL, FALSE, - NULL, grl->tipwindow, "tooltip", + gtk_paint_layout(style, cr, GTK_STATE_NORMAL, FALSE, + grl->tipwindow, "tooltip", max_width - (TOOLTIP_BORDER + SMALL_SPACE) - PANGO_PIXELS(600000), current_height + grl->tip_name_height, grl->tip_layout); } + cairo_destroy(cr); + return FALSE; } diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/gtksavedstatuses.c --- a/pidgin/gtksavedstatuses.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/gtksavedstatuses.c Thu Nov 25 22:30:18 2010 +0000 @@ -535,7 +535,7 @@ static gboolean configure_cb(GtkWidget *widget, GdkEventConfigure *event, StatusWindow *dialog) { - if (GTK_WIDGET_VISIBLE(widget)) + if (gtk_widget_get_visible(widget)) { purple_prefs_set_int(PIDGIN_PREFS_ROOT "/status/dialog/width", event->width); purple_prefs_set_int(PIDGIN_PREFS_ROOT "/status/dialog/height", event->height); diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/gtkscrollbook.c --- a/pidgin/gtkscrollbook.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/gtkscrollbook.c Thu Nov 25 22:30:18 2010 +0000 @@ -94,7 +94,7 @@ gtk_widget_show_all(GTK_WIDGET(scroll_book)); if (count < 1) - gtk_widget_hide_all(scroll_book->hbox); + gtk_widget_hide(scroll_book->hbox); else { gtk_widget_show_all(scroll_book->hbox); if (count == 1) { @@ -138,7 +138,7 @@ } static void -switch_page_cb(GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, PidginScrollBook *scroll_book) +switch_page_cb(GtkNotebook *notebook, GtkWidget *page, guint page_num, PidginScrollBook *scroll_book) { int count; count = gtk_notebook_get_n_pages(GTK_NOTEBOOK(scroll_book->notebook)); @@ -151,7 +151,7 @@ PidginScrollBook *scroll_book; g_return_if_fail(GTK_IS_WIDGET (widget)); - g_return_if_fail (widget->parent == NULL); + g_return_if_fail (gtk_widget_get_parent(widget) == NULL); scroll_book = PIDGIN_SCROLL_BOOK(container); scroll_book->children = g_list_append(scroll_book->children, widget); diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/gtksmiley.c --- a/pidgin/gtksmiley.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/gtksmiley.c Thu Nov 25 22:30:18 2010 +0000 @@ -399,7 +399,7 @@ window = gtk_dialog_new_with_buttons(smiley ? _("Edit Smiley") : _("Add Smiley"), widget ? GTK_WINDOW(widget) : NULL, - GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR, + GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, smiley ? GTK_STOCK_SAVE : GTK_STOCK_ADD, GTK_RESPONSE_ACCEPT, NULL); @@ -414,7 +414,8 @@ /* The vbox */ vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(window)->vbox), vbox); + gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(window))), + vbox); gtk_widget_show(vbox); /* The hbox */ @@ -727,9 +728,10 @@ GtkSelectionData *sd, guint info, guint t, gpointer user_data) { SmileyManager *dialog = user_data; - gchar *name = g_strchomp((gchar *)sd->data); - - if ((sd->length >= 0) && (sd->format == 8)) { + gchar *name = g_strchomp((gchar *) gtk_selection_data_get_data(sd)); + + if ((gtk_selection_data_get_length(sd) >= 0) + && (gtk_selection_data_get_format(sd) == 8)) { /* Well, it looks like the drag event was cool. * Let's do something with it */ @@ -895,7 +897,8 @@ /* The vbox */ vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(win)->vbox), vbox); + gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(win))), + vbox); gtk_widget_show(vbox); /* get the scrolled window with all stuff */ diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/gtksourceundomanager.c --- a/pidgin/gtksourceundomanager.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/gtksourceundomanager.c Thu Nov 25 22:30:18 2010 +0000 @@ -532,7 +532,8 @@ um->priv->document, undo_action->action.insert_anchor.pos, undo_action->action.insert_anchor.pos + 1); - undo_action->action.insert_anchor.anchor->segment = NULL; /* XXX: This may be a bug in GTK+ */ + /* TODO: is this needed in GTK+ 3? */ + /*gtk_text_child_anchor_set_segment(undo_action->action.insert_anchor.anchor, NULL); XXX: This may be a bug in GTK+ */ break; default: /* Unknown action type. */ diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/gtkstatusbox.c --- a/pidgin/gtkstatusbox.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/gtkstatusbox.c Thu Nov 25 22:30:18 2010 +0000 @@ -82,9 +82,9 @@ static void status_menu_refresh_iter(PidginStatusBox *status_box, gboolean status_changed); static void pidgin_status_box_regenerate(PidginStatusBox *status_box, gboolean status_changed); static void pidgin_status_box_changed(PidginStatusBox *box); -static void pidgin_status_box_size_request (GtkWidget *widget, GtkRequisition *requisition); +/*static void pidgin_status_box_size_request (GtkWidget *widget, GtkRequisition *requisition);*/ static void pidgin_status_box_size_allocate (GtkWidget *widget, GtkAllocation *allocation); -static gboolean pidgin_status_box_expose_event (GtkWidget *widget, GdkEventExpose *event); +/*static gboolean pidgin_status_box_expose_event (GtkWidget *widget, GdkEventExpose *event);*/ static void pidgin_status_box_redisplay_buddy_icon(PidginStatusBox *status_box); static void pidgin_status_box_forall (GtkContainer *container, gboolean include_internals, GtkCallback callback, gpointer callback_data); static void pidgin_status_box_popup(PidginStatusBox *box); @@ -282,7 +282,7 @@ if (!message || !*message) { - gtk_widget_hide_all(status_box->vbox); + gtk_widget_hide(status_box->vbox); status_box->imhtml_visible = FALSE; } else @@ -343,9 +343,10 @@ icon_box_dnd_cb(GtkWidget *widget, GdkDragContext *dc, gint x, gint y, GtkSelectionData *sd, guint info, guint t, PidginStatusBox *box) { - gchar *name = (gchar *)sd->data; - - if ((sd->length >= 0) && (sd->format == 8)) { + gchar *name = (gchar *) gtk_selection_data_get_data(sd); + + if ((gtk_selection_data_get_length(sd) >= 0) + && (gtk_selection_data_get_format(sd) == 8)) { /* Well, it looks like the drag event was cool. * Let's do something with it */ if (!g_ascii_strncasecmp(name, "file://", 7)) { @@ -419,7 +420,7 @@ static gboolean icon_box_enter_cb(GtkWidget *widget, GdkEventCrossing *event, PidginStatusBox *box) { - gdk_window_set_cursor(widget->window, box->hand_cursor); + gdk_window_set_cursor(gtk_widget_get_window(widget), box->hand_cursor); gtk_image_set_from_pixbuf(GTK_IMAGE(box->icon), box->buddy_icon_hover); return FALSE; } @@ -427,7 +428,7 @@ static gboolean icon_box_leave_cb(GtkWidget *widget, GdkEventCrossing *event, PidginStatusBox *box) { - gdk_window_set_cursor(widget->window, box->arrow_cursor); + gdk_window_set_cursor(gtk_widget_get_window(widget), box->arrow_cursor); gtk_image_set_from_pixbuf(GTK_IMAGE(box->icon), box->buddy_icon) ; return FALSE; } @@ -615,9 +616,11 @@ parent_class = g_type_class_peek_parent(klass); widget_class = (GtkWidgetClass*)klass; - widget_class->size_request = pidgin_status_box_size_request; + /* this seems to be removed in GTK+ 3...*/ + /*widget_class->size_request = pidgin_status_box_size_request;*/ widget_class->size_allocate = pidgin_status_box_size_allocate; - widget_class->expose_event = pidgin_status_box_expose_event; + /* this seems to be removed in GTK+ 3...*/ + /*widget_class->expose_event = pidgin_status_box_expose_event;*/ container_class->child_type = pidgin_status_box_child_type; container_class->forall = pidgin_status_box_forall; @@ -931,7 +934,7 @@ if (!purple_savedstatus_is_transient(saved_status) || !message || !*message) { status_box->imhtml_visible = FALSE; - gtk_widget_hide_all(status_box->vbox); + gtk_widget_hide(status_box->vbox); } else { @@ -1135,7 +1138,7 @@ static gboolean imhtml_remove_focus(GtkWidget *w, GdkEventKey *event, PidginStatusBox *status_box) { - if (event->keyval == GDK_Tab || event->keyval == GDK_KP_Tab || event->keyval == GDK_ISO_Left_Tab) + if (event->keyval == GDK_KEY_Tab || event->keyval == GDK_KEY_KP_Tab || event->keyval == GDK_KEY_ISO_Left_Tab) { /* If last inserted character is a tab, then remove the focus from here */ GtkWidget *top = gtk_widget_get_toplevel(w); @@ -1148,7 +1151,7 @@ return FALSE; /* Reset the status if Escape was pressed */ - if (event->keyval == GDK_Escape) + if (event->keyval == GDK_KEY_Escape) { purple_timeout_remove(status_box->typing); status_box->typing = 0; @@ -1299,13 +1302,15 @@ GdkRectangle monitor; GtkRequisition popup_req; GtkPolicyType hpolicy, vpolicy; - - gdk_window_get_origin (GTK_WIDGET(status_box)->window, x, y); - - *x += GTK_WIDGET(status_box)->allocation.x; - *y += GTK_WIDGET(status_box)->allocation.y; - - *width = GTK_WIDGET(status_box)->allocation.width; + GtkAllocation allocation; + + gtk_widget_get_allocation(GTK_WIDGET(status_box), &allocation); + gdk_window_get_origin (gtk_widget_get_window(GTK_WIDGET(status_box)), x, y); + + *x += allocation.x; + *y += allocation.y; + + *width = allocation.width; hpolicy = vpolicy = GTK_POLICY_NEVER; gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (status_box->scrolled_window), @@ -1324,7 +1329,7 @@ screen = gtk_widget_get_screen (GTK_WIDGET (status_box)); monitor_num = gdk_screen_get_monitor_at_window (screen, - GTK_WIDGET (status_box)->window); + gtk_widget_get_window(GTK_WIDGET (status_box))); gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor); if (*x < monitor.x) @@ -1332,13 +1337,13 @@ else if (*x + *width > monitor.x + monitor.width) *x = monitor.x + monitor.width - *width; - if (*y + GTK_WIDGET(status_box)->allocation.height + *height <= monitor.y + monitor.height) - *y += GTK_WIDGET(status_box)->allocation.height; + if (*y + allocation.height + *height <= monitor.y + monitor.height) + *y += allocation.height; else if (*y - *height >= monitor.y) *y -= *height; - else if (monitor.y + monitor.height - (*y + GTK_WIDGET(status_box)->allocation.height) > *y - monitor.y) + else if (monitor.y + monitor.height - (*y + allocation.height) > *y - monitor.y) { - *y += GTK_WIDGET(status_box)->allocation.height; + *y += allocation.height; *height = monitor.y + monitor.height - *y; } else @@ -1369,7 +1374,7 @@ if (!grab_keyboard || gdk_keyboard_grab (window, TRUE, activate_time) == 0) return TRUE; else { - gdk_display_pointer_ungrab (gdk_drawable_get_display (window), activate_time); + gdk_display_pointer_ungrab (gdk_window_get_display (window), activate_time); return FALSE; } } @@ -1388,7 +1393,7 @@ gtk_window_move (GTK_WINDOW (box->popup_window), x, y); gtk_widget_show(box->popup_window); gtk_widget_grab_focus (box->tree_view); - if (!popup_grab_on_window (box->popup_window->window, + if (!popup_grab_on_window (gtk_widget_get_window(box->popup_window), GDK_CURRENT_TIME, TRUE)) { gtk_widget_hide (box->popup_window); return; @@ -1419,10 +1424,10 @@ toggle_key_press_cb(GtkWidget *widget, GdkEventKey *event, PidginStatusBox *box) { switch (event->keyval) { - case GDK_Return: - case GDK_KP_Enter: - case GDK_KP_Space: - case GDK_space: + case GDK_KEY_Return: + case GDK_KEY_KP_Enter: + case GDK_KEY_KP_Space: + case GDK_KEY_space: if (!box->popup_in_progress) { pidgin_status_box_popup (box); box->popup_in_progress = TRUE; @@ -1654,7 +1659,7 @@ GdkEventKey *event, PidginStatusBox *box) { if (box->popup_in_progress) { - if (event->keyval == GDK_Escape) { + if (event->keyval == GDK_KEY_Escape) { pidgin_status_box_popdown(box); return TRUE; } else { @@ -1665,9 +1670,9 @@ if (gtk_tree_selection_get_selected(sel, NULL, &iter)) { gboolean ret = TRUE; path = gtk_tree_model_get_path(GTK_TREE_MODEL(box->dropdown_store), &iter); - if (event->keyval == GDK_Return) { + if (event->keyval == GDK_KEY_Return) { treeview_activate_current_selection(box, path); - } else if (event->keyval == GDK_Delete) { + } else if (event->keyval == GDK_KEY_Delete) { tree_view_delete_current_selection(box, path); } else ret = FALSE; @@ -1743,7 +1748,7 @@ GtkWidget *toplevel; GtkTreeSelection *sel; - GTK_WIDGET_SET_FLAGS (status_box, GTK_NO_WINDOW); + gtk_widget_set_has_window(GTK_WIDGET(status_box), FALSE); status_box->imhtml_visible = FALSE; status_box->network_available = purple_network_is_available(); status_box->connecting = FALSE; @@ -1927,12 +1932,14 @@ } +/* TODO: is this needed in GTK+ 3? */ +#if 0 static void pidgin_status_box_size_request(GtkWidget *widget, GtkRequisition *requisition) { GtkRequisition box_req; - gint border_width = GTK_CONTAINER (widget)->border_width; + gint border_width = gtk_container_get_border_width(GTK_CONTAINER (widget)); gtk_widget_size_request(PIDGIN_STATUS_BOX(widget)->toggle_button, requisition); @@ -1947,6 +1954,7 @@ requisition->width = 1; } +#endif /* From gnome-panel */ static void @@ -1995,7 +2003,7 @@ PidginStatusBox *status_box = PIDGIN_STATUS_BOX(widget); GtkRequisition req = {0,0}; GtkAllocation parent_alc, box_alc, icon_alc; - gint border_width = GTK_CONTAINER (widget)->border_width; + gint border_width = gtk_container_get_border_width(GTK_CONTAINER (widget)); gtk_widget_size_request(status_box->toggle_button, &req); /* Make this icon the same size as other buddy icons in the list; unless it already wants to be bigger */ @@ -2034,9 +2042,11 @@ gtk_widget_size_allocate(status_box->icon_box, &icon_alc); } gtk_widget_size_allocate(status_box->toggle_button, &parent_alc); - widget->allocation = *allocation; + gtk_widget_set_allocation(GTK_WIDGET(status_box), allocation); } +/* TODO: don't think this is nessesary in GTK+ 3 */ +#if 0 static gboolean pidgin_status_box_expose_event(GtkWidget *widget, GdkEventExpose *event) @@ -2051,6 +2061,7 @@ } return FALSE; } +#endif static void pidgin_status_box_forall(GtkContainer *container, @@ -2333,7 +2344,7 @@ message = pidgin_status_box_get_message(status_box); if (!message || !*message) { - gtk_widget_hide_all(status_box->vbox); + gtk_widget_hide(status_box->vbox); status_box->imhtml_visible = FALSE; if (message != NULL) { @@ -2605,7 +2616,7 @@ purple_timeout_remove(status_box->typing); status_box->typing = 0; - if (GTK_WIDGET_IS_SENSITIVE(GTK_WIDGET(status_box))) + if (gtk_widget_get_sensitive(GTK_WIDGET(status_box))) { if (type == PIDGIN_STATUS_BOX_TYPE_POPULAR || type == PIDGIN_STATUS_BOX_TYPE_SAVED_POPULAR) { @@ -2667,7 +2678,7 @@ } g_list_free(accounts); - if (GTK_WIDGET_IS_SENSITIVE(GTK_WIDGET(status_box))) + if (gtk_widget_get_sensitive(GTK_WIDGET(status_box))) { if (status_box->imhtml_visible) { @@ -2687,7 +2698,7 @@ } else { - gtk_widget_hide_all(status_box->vbox); + gtk_widget_hide(status_box->vbox); activate_currently_selected_status(status_box); /* This is where we actually set the status */ } } @@ -2723,7 +2734,7 @@ static void imhtml_changed_cb(GtkTextBuffer *buffer, void *data) { PidginStatusBox *status_box = (PidginStatusBox*)data; - if (GTK_WIDGET_IS_SENSITIVE(GTK_WIDGET(status_box))) + if (gtk_widget_get_sensitive(GTK_WIDGET(status_box))) { if (status_box->typing != 0) { pidgin_status_box_pulse_typing(status_box); diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/gtkutils.c --- a/pidgin/gtkutils.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/gtkutils.c Thu Nov 25 22:30:18 2010 +0000 @@ -188,7 +188,7 @@ GtkWidget * pidgin_dialog_get_vbox_with_properties(GtkDialog *dialog, gboolean homogeneous, gint spacing) { - GtkBox *vbox = GTK_BOX(GTK_DIALOG(dialog)->vbox); + GtkBox *vbox = GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))); gtk_box_set_homogeneous(vbox, homogeneous); gtk_box_set_spacing(vbox, spacing); return GTK_WIDGET(vbox); @@ -196,12 +196,12 @@ GtkWidget *pidgin_dialog_get_vbox(GtkDialog *dialog) { - return GTK_DIALOG(dialog)->vbox; + return gtk_dialog_get_content_area(GTK_DIALOG(dialog)); } GtkWidget *pidgin_dialog_get_action_area(GtkDialog *dialog) { - return GTK_DIALOG(dialog)->action_area; + return gtk_dialog_get_action_area(GTK_DIALOG(dialog)); } GtkWidget *pidgin_dialog_add_button(GtkDialog *dialog, const char *label, @@ -297,7 +297,7 @@ if (to_toggle == NULL) return; - sensitivity = GTK_WIDGET_IS_SENSITIVE(to_toggle); + sensitivity = gtk_widget_get_sensitive(to_toggle); gtk_widget_set_sensitive(to_toggle, !sensitivity); } @@ -314,7 +314,7 @@ if (element == NULL) continue; - sensitivity = GTK_WIDGET_IS_SENSITIVE(element); + sensitivity = gtk_widget_get_sensitive(element); gtk_widget_set_sensitive(element, !sensitivity); } @@ -326,7 +326,7 @@ if (to_toggle == NULL) return; - if (GTK_WIDGET_VISIBLE(to_toggle)) + if (gtk_widget_get_visible(to_toggle)) gtk_widget_hide(to_toggle); else gtk_widget_show(to_toggle); @@ -1211,8 +1211,8 @@ widget = GTK_WIDGET(menu); screen = gtk_widget_get_screen(widget); - xthickness = widget->style->xthickness; - ythickness = widget->style->ythickness; + xthickness = gtk_widget_get_style(widget)->xthickness; + ythickness = gtk_widget_get_style(widget)->ythickness; rtl = (gtk_widget_get_direction(widget) == GTK_TEXT_DIR_RTL); /* @@ -1350,9 +1350,9 @@ GtkTreePath *path; GtkTreeViewColumn *col; GdkRectangle rect; - gint ythickness = GTK_WIDGET(menu)->style->ythickness; - - gdk_window_get_origin (widget->window, x, y); + gint ythickness = gtk_widget_get_style(GTK_WIDGET(menu))->ythickness; + + gdk_window_get_origin (gtk_widget_get_window(widget), x, y); gtk_tree_view_get_cursor (tv, &path, &col); gtk_tree_view_get_cell_area (tv, path, col, &rect); @@ -1466,7 +1466,7 @@ pidgin_dnd_file_manage(GtkSelectionData *sd, PurpleAccount *account, const char *who) { GdkPixbuf *pb; - GList *files = purple_uri_list_extract_filenames((const gchar *)sd->data); + GList *files = purple_uri_list_extract_filenames((const gchar *) gtk_selection_data_get_data(sd)); PurpleConnection *gc = purple_account_get_connection(account); PurplePluginProtocolInfo *prpl_info = NULL; #ifndef _WIN32 @@ -1784,7 +1784,9 @@ group = gtk_menu_get_accel_group(GTK_MENU(menu)); if (group) { - char *path = g_strdup_printf("%s/%s", GTK_MENU_ITEM(menuitem)->accel_path, act->label); + char *path = g_strdup_printf("%s/%s", + gtk_menu_item_get_accel_path(GTK_MENU_ITEM(menuitem)), + act->label); gtk_menu_set_accel_path(GTK_MENU(submenu), path); g_free(path); gtk_menu_set_accel_group(GTK_MENU(submenu), group); @@ -2107,23 +2109,23 @@ GdkCursor *cursor; g_return_if_fail(widget != NULL); - if (widget->window == NULL) + if (gtk_widget_get_window(widget) == NULL) return; cursor = gdk_cursor_new(cursor_type); - gdk_window_set_cursor(widget->window, cursor); + gdk_window_set_cursor(gtk_widget_get_window(widget), cursor); gdk_cursor_unref(cursor); - gdk_display_flush(gdk_drawable_get_display(GDK_DRAWABLE(widget->window))); + gdk_display_flush(gdk_window_get_display(gtk_widget_get_window(widget))); } void pidgin_clear_cursor(GtkWidget *widget) { g_return_if_fail(widget != NULL); - if (widget->window == NULL) + if (gtk_widget_get_window(widget) == NULL) return; - gdk_window_set_cursor(widget->window, NULL); + gdk_window_set_cursor(gtk_widget_get_window(widget), NULL); } struct _icon_chooser { @@ -2810,18 +2812,18 @@ } static void -combo_box_changed_cb(GtkComboBox *combo_box, GtkEntry *entry) +combo_box_changed_cb(GtkComboBoxText *combo_box, GtkEntry *entry) { - char *text = gtk_combo_box_get_active_text(combo_box); + char *text = gtk_combo_box_text_get_active_text(combo_box); gtk_entry_set_text(entry, text ? text : ""); g_free(text); } static gboolean -entry_key_pressed_cb(GtkWidget *entry, GdkEventKey *key, GtkComboBox *combo) +entry_key_pressed_cb(GtkWidget *entry, GdkEventKey *key, GtkComboBoxText *combo) { - if (key->keyval == GDK_Down || key->keyval == GDK_Up) { - gtk_combo_box_popup(combo); + if (key->keyval == GDK_KEY_Down || key->keyval == GDK_KEY_Up) { + gtk_combo_box_popup(GTK_COMBO_BOX(combo)); return TRUE; } return FALSE; @@ -2830,10 +2832,10 @@ GtkWidget * pidgin_text_combo_box_entry_new(const char *default_item, GList *items) { - GtkComboBox *ret = NULL; + GtkComboBoxText *ret = NULL; GtkWidget *the_entry = NULL; - ret = GTK_COMBO_BOX(gtk_combo_box_new_text()); + ret = GTK_COMBO_BOX_TEXT(gtk_combo_box_text_new()); the_entry = gtk_entry_new(); gtk_container_add(GTK_CONTAINER(ret), the_entry); @@ -2843,7 +2845,7 @@ for (; items != NULL ; items = items->next) { char *text = items->data; if (text && *text) - gtk_combo_box_append_text(ret, text); + gtk_combo_box_text_append_text(ret, text); } g_signal_connect(G_OBJECT(ret), "changed", (GCallback)combo_box_changed_cb, the_entry); @@ -2854,12 +2856,12 @@ const char *pidgin_text_combo_box_entry_get_text(GtkWidget *widget) { - return gtk_entry_get_text(GTK_ENTRY(GTK_BIN((widget))->child)); + return gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN((widget))))); } void pidgin_text_combo_box_entry_set_text(GtkWidget *widget, const char *text) { - gtk_entry_set_text(GTK_ENTRY(GTK_BIN((widget))->child), (text)); + gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN((widget)))), (text)); } GtkWidget * @@ -2980,12 +2982,12 @@ windows = g_list_delete_link(windows, windows); if (window == widget || - !GTK_WIDGET_VISIBLE(window)) { + !gtk_widget_get_visible(window)) { continue; } if (gtk_window_has_toplevel_focus(GTK_WINDOW(window)) || - (menu && menu == window->window)) { + (menu && menu == gtk_widget_get_window(window))) { parent = window; break; } diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/gtkwhiteboard.c --- a/pidgin/gtkwhiteboard.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/gtkwhiteboard.c Thu Nov 25 22:30:18 2010 +0000 @@ -280,13 +280,13 @@ /* TODO Ask if user wants to save picture before the session is closed */ /* Clear graphical memory */ - if(gtkwb->pixmap) + if(gtkwb->pixbuf) { - cairo_t *cr = g_object_get_data(G_OBJECT(gtkwb->pixmap), "cairo-context"); + cairo_t *cr = g_object_get_data(G_OBJECT(gtkwb->pixbuf), "cairo-context"); if (cr) cairo_destroy(cr); - g_object_unref(gtkwb->pixmap); - gtkwb->pixmap = NULL; + g_object_unref(gtkwb->pixbuf); + gtkwb->pixbuf = NULL; } colour_dialog = g_object_get_data(G_OBJECT(gtkwb->window), "colour-dialog"); @@ -356,28 +356,33 @@ static gboolean pidgin_whiteboard_configure_event(GtkWidget *widget, GdkEventConfigure *event, gpointer data) { PidginWhiteboard *gtkwb = (PidginWhiteboard*)data; - GdkPixmap *pixmap = gtkwb->pixmap; + GdkPixbuf *pixbuf = gtkwb->pixbuf; cairo_t *cr; - - if (pixmap) { - cr = g_object_get_data(G_OBJECT(pixmap), "cairo-context"); + GdkWindow *window = gtk_widget_get_window(widget); + GtkAllocation allocation; + + if (pixbuf) { + cr = g_object_get_data(G_OBJECT(pixbuf), "cairo-context"); if (cr) cairo_destroy(cr); - g_object_unref(pixmap); + g_object_unref(pixbuf); } - pixmap = gdk_pixmap_new(widget->window, - widget->allocation.width, - widget->allocation.height, - -1); - gtkwb->pixmap = pixmap; + gtk_widget_get_allocation(widget, &allocation); + + pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, + FALSE, + gdk_visual_get_depth(GDK_VISUAL(window)), + allocation.width, allocation.height); + + gtkwb->pixbuf = pixbuf; - cr = gdk_cairo_create(GDK_DRAWABLE(pixmap)); - g_object_set_data(G_OBJECT(pixmap), "cairo-context", cr); - gdk_cairo_set_source_color(cr, &widget->style->white); + cr = gdk_cairo_create(GDK_DRAWABLE(pixbuf)); + g_object_set_data(G_OBJECT(pixbuf), "cairo-context", cr); + gdk_cairo_set_source_color(cr, >k_widget_get_style(widget)->white); cairo_rectangle(cr, 0, 0, - widget->allocation.width, widget->allocation.height); + allocation.width, allocation.height); cairo_fill(cr); return TRUE; @@ -386,11 +391,11 @@ static gboolean pidgin_whiteboard_expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data) { PidginWhiteboard *gtkwb = (PidginWhiteboard*)(data); - GdkPixmap *pixmap = gtkwb->pixmap; + GdkPixbuf *pixbuf = gtkwb->pixbuf; cairo_t *cr; - cr = gdk_cairo_create(GDK_DRAWABLE(widget->window)); - gdk_cairo_set_source_pixmap(cr, pixmap, 0, 0); + cr = gdk_cairo_create(GDK_DRAWABLE(gtk_widget_get_window(widget))); + gdk_cairo_set_source_pixbuf(cr, pixbuf, 0, 0); cairo_rectangle(cr, event->area.x, event->area.y, event->area.width, event->area.height); @@ -403,7 +408,7 @@ static gboolean pidgin_whiteboard_brush_down(GtkWidget *widget, GdkEventButton *event, gpointer data) { PidginWhiteboard *gtkwb = (PidginWhiteboard*)data; - GdkPixmap *pixmap = gtkwb->pixmap; + GdkPixbuf *pixbuf = gtkwb->pixbuf; PurpleWhiteboard *wb = gtkwb->wb; GList *draw_list = wb->draw_list; @@ -418,7 +423,7 @@ BrushState = BRUSH_STATE_DOWN; - if(event->button == 1 && pixmap != NULL) + if(event->button == 1 && pixbuf != NULL) { /* Check if draw_list has contents; if so, clear it */ if(draw_list) @@ -456,7 +461,7 @@ GdkModifierType state; PidginWhiteboard *gtkwb = (PidginWhiteboard*)data; - GdkPixmap *pixmap = gtkwb->pixmap; + GdkPixbuf *pixbuf = gtkwb->pixbuf; PurpleWhiteboard *wb = gtkwb->wb; GList *draw_list = wb->draw_list; @@ -470,7 +475,7 @@ state = event->state; } - if(state & GDK_BUTTON1_MASK && pixmap != NULL) + if(state & GDK_BUTTON1_MASK && pixbuf != NULL) { if((BrushState != BRUSH_STATE_DOWN) && (BrushState != BRUSH_STATE_MOTION)) { @@ -536,7 +541,7 @@ static gboolean pidgin_whiteboard_brush_up(GtkWidget *widget, GdkEventButton *event, gpointer data) { PidginWhiteboard *gtkwb = (PidginWhiteboard*)data; - GdkPixmap *pixmap = gtkwb->pixmap; + GdkPixbuf *pixbuf = gtkwb->pixbuf; PurpleWhiteboard *wb = gtkwb->wb; GList *draw_list = wb->draw_list; @@ -551,7 +556,7 @@ } BrushState = BRUSH_STATE_UP; - if(event->button == 1 && pixmap != NULL) + if(event->button == 1 && pixbuf != NULL) { /* If the brush was never moved, express two sets of two deltas That's a * 'point,' but not for Yahoo! @@ -593,9 +598,9 @@ { PidginWhiteboard *gtkwb = wb->ui_data; GtkWidget *widget = gtkwb->drawing_area; - GdkPixmap *pixmap = gtkwb->pixmap; + GdkPixbuf *pixbuf = gtkwb->pixbuf; - cairo_t *gfx_con = g_object_get_data(G_OBJECT(pixmap), "cairo-context"); + cairo_t *gfx_con = g_object_get_data(G_OBJECT(pixbuf), "cairo-context"); GdkColor col; /* Interpret and convert color */ @@ -701,21 +706,24 @@ static void pidgin_whiteboard_clear(PurpleWhiteboard *wb) { PidginWhiteboard *gtkwb = wb->ui_data; - GdkPixmap *pixmap = gtkwb->pixmap; + GdkPixbuf *pixbuf = gtkwb->pixbuf; GtkWidget *drawing_area = gtkwb->drawing_area; - cairo_t *cr = g_object_get_data(G_OBJECT(pixmap), "cairo-context"); + cairo_t *cr = g_object_get_data(G_OBJECT(pixbuf), "cairo-context"); + GtkAllocation allocation; - gdk_cairo_set_source_color(cr, &drawing_area->style->white); + gtk_widget_get_allocation(drawing_area, &allocation); + + gdk_cairo_set_source_color(cr, >k_widget_get_style(drawing_area)->white); cairo_rectangle(cr, 0, 0, - drawing_area->allocation.width, - drawing_area->allocation.height); + allocation.width, + allocation.height); cairo_fill(cr); gtk_widget_queue_draw_area(drawing_area, 0, 0, - drawing_area->allocation.width, - drawing_area->allocation.height); + allocation.width, + allocation.height); } static void pidgin_whiteboard_button_clear_press(GtkWidget *widget, gpointer data) @@ -781,12 +789,15 @@ gtk_widget_destroy(dialog); /* Makes an icon from the whiteboard's canvas 'image' */ + pixbuf = gtkwb->pixbuf; + /* pixbuf = gdk_pixbuf_get_from_drawable(NULL, (GdkDrawable*)(gtkwb->pixmap), gdk_drawable_get_colormap(gtkwb->pixmap), 0, 0, 0, 0, gtkwb->width, gtkwb->height); + */ if(gdk_pixbuf_save(pixbuf, filename, "jpeg", NULL, "quality", "100", NULL)) purple_debug_info("gtkwhiteboard", "File Saved...\n"); @@ -807,12 +818,15 @@ GdkPixbuf *pixbuf; /* Makes an icon from the whiteboard's canvas 'image' */ + pixbuf = gtkwb->pixbuf; + /* pixbuf = gdk_pixbuf_get_from_drawable(NULL, (GdkDrawable*)(gtkwb->pixmap), gdk_drawable_get_colormap(gtkwb->pixmap), 0, 0, 0, 0, gtkwb->width, gtkwb->height); + */ gtk_window_set_icon((GtkWindow*)(gtkwb->window), pixbuf); } @@ -853,23 +867,29 @@ { GdkColor color; GtkColorSelectionDialog *dialog; - + GtkWidget *ok_button; + dialog = (GtkColorSelectionDialog *)gtk_color_selection_dialog_new(_("Select color")); g_object_set_data(G_OBJECT(gtkwb->window), "colour-dialog", dialog); - g_signal_connect(G_OBJECT(dialog->colorsel), "color-changed", + g_signal_connect(G_OBJECT(gtk_color_selection_dialog_get_color_selection(dialog)), + "color-changed", G_CALLBACK(change_color_cb), gtkwb); + /* gtk_widget_destroy(dialog->cancel_button); gtk_widget_destroy(dialog->help_button); - - g_signal_connect(G_OBJECT(dialog->ok_button), "clicked", + */ + g_object_get(G_OBJECT(dialog), "ok-button", &ok_button, NULL); + + g_signal_connect(G_OBJECT(ok_button), "clicked", G_CALLBACK(color_selection_dialog_destroy), gtkwb); - gtk_color_selection_set_has_palette(GTK_COLOR_SELECTION(dialog->colorsel), TRUE); + gtk_color_selection_set_has_palette(GTK_COLOR_SELECTION(gtk_color_selection_dialog_get_color_selection(dialog)), TRUE); pidgin_whiteboard_rgb24_to_rgb48(gtkwb->brush_color, &color); - gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(dialog->colorsel), &color); + gtk_color_selection_set_current_color( + GTK_COLOR_SELECTION(gtk_color_selection_dialog_get_color_selection(dialog)), &color); gtk_widget_show_all(GTK_WIDGET(dialog)); } diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/gtkwhiteboard.h --- a/pidgin/gtkwhiteboard.h Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/gtkwhiteboard.h Thu Nov 25 22:30:18 2010 +0000 @@ -51,7 +51,7 @@ GtkWidget *window; /**< Window for the Doodle session */ GtkWidget *drawing_area; /**< Drawing area */ - GdkPixmap *pixmap; /**< Memory for drawing area */ + GdkPixbuf *pixbuf; /**< Memory for drawing area */ int width; /**< Canvas width */ int height; /**< Canvas height */ diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/minidialog.c --- a/pidgin/minidialog.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/minidialog.c Thu Nov 25 22:30:18 2010 +0000 @@ -160,7 +160,7 @@ guint pidgin_mini_dialog_get_num_children(PidginMiniDialog *mini_dialog) { - return g_list_length(mini_dialog->contents->children); + return g_list_length(gtk_container_get_children(GTK_CONTAINER(mini_dialog->contents))); } static gboolean diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/pidgintooltip.c --- a/pidgin/pidgintooltip.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/pidgintooltip.c Thu Nov 25 22:30:18 2010 +0000 @@ -104,9 +104,12 @@ pidgin_tooltip_expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data) { if (pidgin_tooltip.paint_tooltip) { - gtk_paint_flat_box(widget->style, widget->window, GTK_STATE_NORMAL, GTK_SHADOW_OUT, - NULL, widget, "tooltip", 0, 0, -1, -1); + cairo_t *cr = gdk_cairo_create(GDK_DRAWABLE(gtk_widget_get_window(widget))); + gtk_paint_flat_box(gtk_widget_get_style(widget), cr, + GTK_STATE_NORMAL, GTK_SHADOW_OUT, + widget, "tooltip", 0, 0, -1, -1); pidgin_tooltip.paint_tooltip(widget, data); + cairo_destroy(cr); } return FALSE; } diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/plugins/contact_priority.c --- a/pidgin/plugins/contact_priority.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/plugins/contact_priority.c Thu Nov 25 22:30:18 2010 +0000 @@ -75,7 +75,7 @@ GtkWidget *ret = NULL, *hbox = NULL, *frame = NULL, *vbox = NULL; GtkWidget *label = NULL, *spin = NULL, *check = NULL; GtkWidget *optmenu = NULL; - GtkObject *adj = NULL; + GtkAdjustment *adj = NULL; GtkSizeGroup *sg = NULL; PurpleAccount *account = NULL; int i; diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/plugins/convcolors.c --- a/pidgin/plugins/convcolors.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/plugins/convcolors.c Thu Nov 25 22:30:18 2010 +0000 @@ -302,7 +302,7 @@ } static void -disconnect_prefs_callbacks(GtkObject *object, gpointer data) +disconnect_prefs_callbacks(GtkWidget *widget, gpointer data) { PurplePlugin *plugin = (PurplePlugin *)data; @@ -383,7 +383,7 @@ purple_prefs_connect_callback(plugin, tmp2, enable_toggled, button); } - g_signal_connect(GTK_OBJECT(ret), "destroy", G_CALLBACK(disconnect_prefs_callbacks), plugin); + g_signal_connect(ret, "destroy", G_CALLBACK(disconnect_prefs_callbacks), plugin); frame = pidgin_make_frame(ret, _("General")); pidgin_prefs_checkbox(_("Ignore incoming format"), PREF_IGNORE, frame); pidgin_prefs_checkbox(_("Apply in Chats"), PREF_CHATS, frame); diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/plugins/disco/gtkdisco.c --- a/pidgin/plugins/disco/gtkdisco.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/plugins/disco/gtkdisco.c Thu Nov 25 22:30:18 2010 +0000 @@ -429,15 +429,12 @@ static gboolean disco_paint_tooltip(GtkWidget *tipwindow, gpointer data) { + cairo_t *cr = gdk_cairo_create(GDK_DRAWABLE(tipwindow)); PangoLayout *layout = g_object_get_data(G_OBJECT(tipwindow), "tooltip-plugin"); -#if GTK_CHECK_VERSION(2,14,0) gtk_paint_layout(gtk_widget_get_style(tipwindow), - gtk_widget_get_window(tipwindow), + cr, GTK_STATE_NORMAL, FALSE, -#else - gtk_paint_layout(tipwindow->style, tipwindow->window, GTK_STATE_NORMAL, FALSE, -#endif - NULL, tipwindow, "tooltip", + tipwindow, "tooltip", 6, 6, layout); return TRUE; } diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/plugins/markerline.c --- a/pidgin/plugins/markerline.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/plugins/markerline.c Thu Nov 25 22:30:18 2010 +0000 @@ -76,6 +76,7 @@ gtk_text_view_buffer_to_window_coords(GTK_TEXT_VIEW(widget), GTK_TEXT_WINDOW_TEXT, 0, last_y, 0, &y); + /* TODO: port this to using Cairo if (y >= event->area.y) { GdkColor red = {0, 0xffff, 0, 0}; @@ -88,6 +89,7 @@ cairo_stroke(cr); cairo_destroy(cr); } + */ return FALSE; } diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/plugins/themeedit.c --- a/pidgin/plugins/themeedit.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/plugins/themeedit.c Thu Nov 25 22:30:18 2010 +0000 @@ -306,7 +306,6 @@ } } - gtk_dialog_set_has_separator(GTK_DIALOG(dialog), TRUE); #ifdef NOT_SADRUL pidgin_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_SAVE, G_CALLBACK(save_blist_theme), dialog); #endif diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/plugins/ticker/gtkticker.c --- a/pidgin/plugins/ticker/gtkticker.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/plugins/ticker/gtkticker.c Thu Nov 25 22:30:18 2010 +0000 @@ -128,7 +128,7 @@ widget_class->map = gtk_ticker_map; widget_class->realize = gtk_ticker_realize; - widget_class->size_request = gtk_ticker_size_request; + /*widget_class->size_request = gtk_ticker_size_request;*/ widget_class->size_allocate = gtk_ticker_size_allocate; container_class->add = gtk_ticker_add_real; @@ -178,7 +178,7 @@ ticker->children = g_list_append (ticker->children, child_info); - if (gtk_widget_get_realized (ticker)) + if (gtk_widget_get_realized (GTK_WIDGET(ticker))) gtk_widget_realize (widget); if (gtk_widget_get_visible (GTK_WIDGET (ticker)) && @@ -332,11 +332,11 @@ #endif attributes.wclass = GDK_INPUT_OUTPUT; attributes.visual = gtk_widget_get_visual (widget); - attributes.colormap = gtk_widget_get_colormap (widget); + /*attributes.colormap = gtk_widget_get_colormap (widget);*/ attributes.event_mask = gtk_widget_get_events (widget); attributes.event_mask |= GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK; - attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; + attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL /*| GDK_WA_COLORMAP*/; window = gdk_window_new (gtk_widget_get_parent_window (widget), &attributes, attributes_mask); diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/plugins/timestamp.c --- a/pidgin/plugins/timestamp.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/plugins/timestamp.c Thu Nov 25 22:30:18 2010 +0000 @@ -134,7 +134,7 @@ GtkWidget *ret; GtkWidget *frame, *label; GtkWidget *vbox, *hbox; - GtkObject *adj; + GtkAdjustment *adj; GtkWidget *spinner; ret = gtk_vbox_new(FALSE, 18); diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/plugins/timestamp_format.c --- a/pidgin/plugins/timestamp_format.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/plugins/timestamp_format.c Thu Nov 25 22:30:18 2010 +0000 @@ -155,8 +155,9 @@ if (!frame) return; + /* GTK_DIALOG_NO_SEPARATOR seems to be gone in gtk+ 3.0... */ dialog = gtk_dialog_new_with_buttons(PIDGIN_ALERT_TITLE, NULL, - GTK_DIALOG_NO_SEPARATOR | GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); g_signal_connect_after(G_OBJECT(dialog), "response", G_CALLBACK(gtk_widget_destroy), dialog); diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/plugins/vvconfig.c --- a/pidgin/plugins/vvconfig.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/plugins/vvconfig.c Thu Nov 25 22:30:18 2010 +0000 @@ -506,14 +506,14 @@ } static void -config_destroy(GtkObject *w, gpointer nul) +config_destroy(GtkWidget *w, gpointer nul) { purple_debug_info("vvconfig", "closing vv configuration window\n"); window = NULL; } static void -config_close(GtkObject *w, gpointer nul) +config_close(GtkWidget *w, gpointer nul) { gtk_widget_destroy(GTK_WIDGET(window)); } diff -r ba21d11c06d0 -r a3bd979c9ce4 pidgin/plugins/xmppconsole.c --- a/pidgin/plugins/xmppconsole.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/plugins/xmppconsole.c Thu Nov 25 22:30:18 2010 +0000 @@ -274,7 +274,7 @@ GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); - gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); + /* TODO: how to set no separator for GtkDialog in gtk+ 3.0... */ gtk_dialog_set_default_response (GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT); gtk_container_set_border_width(GTK_CONTAINER(dialog), 12); #if GTK_CHECK_VERSION(2,14,0) @@ -302,11 +302,11 @@ gtk_size_group_add_widget(sg, label); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); - type_combo = gtk_combo_box_new_text(); - gtk_combo_box_append_text(GTK_COMBO_BOX(type_combo), "get"); - gtk_combo_box_append_text(GTK_COMBO_BOX(type_combo), "set"); - gtk_combo_box_append_text(GTK_COMBO_BOX(type_combo), "result"); - gtk_combo_box_append_text(GTK_COMBO_BOX(type_combo), "error"); + type_combo = gtk_combo_box_text_new(); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(type_combo), "get"); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(type_combo), "set"); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(type_combo), "result"); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(type_combo), "error"); gtk_combo_box_set_active(GTK_COMBO_BOX(type_combo), 0); gtk_box_pack_start(GTK_BOX(hbox), type_combo, FALSE, FALSE, 0); @@ -325,7 +325,7 @@ to && *to ? to : "", to && *to ? "'" : "", g_random_int(), - gtk_combo_box_get_active_text(GTK_COMBO_BOX(type_combo))); + gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(type_combo))); buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(console->entry)); gtk_text_buffer_set_text(buffer, stanza, -1); @@ -362,7 +362,9 @@ GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); - gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); + + /* TODO: find a way to specify no separator for a dialog in gtk+ 3 */ + /*gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE);*/ gtk_dialog_set_default_response (GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT); gtk_container_set_border_width(GTK_CONTAINER(dialog), 12); #if GTK_CHECK_VERSION(2,14,0) @@ -389,15 +391,15 @@ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gtk_size_group_add_widget(sg, label); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); - type_combo = gtk_combo_box_new_text(); - gtk_combo_box_append_text(GTK_COMBO_BOX(type_combo), "default"); - gtk_combo_box_append_text(GTK_COMBO_BOX(type_combo), "unavailable"); - gtk_combo_box_append_text(GTK_COMBO_BOX(type_combo), "subscribe"); - gtk_combo_box_append_text(GTK_COMBO_BOX(type_combo), "unsubscribe"); - gtk_combo_box_append_text(GTK_COMBO_BOX(type_combo), "subscribed"); - gtk_combo_box_append_text(GTK_COMBO_BOX(type_combo), "unsubscribed"); - gtk_combo_box_append_text(GTK_COMBO_BOX(type_combo), "probe"); - gtk_combo_box_append_text(GTK_COMBO_BOX(type_combo), "error"); + type_combo = gtk_combo_box_text_new(); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(type_combo), "default"); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(type_combo), "unavailable"); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(type_combo), "subscribe"); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(type_combo), "unsubscribe"); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(type_combo), "subscribed"); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(type_combo), "unsubscribed"); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(type_combo), "probe"); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(type_combo), "error"); gtk_combo_box_set_active(GTK_COMBO_BOX(type_combo), 0); gtk_box_pack_start(GTK_BOX(hbox), type_combo, FALSE, FALSE, 0); @@ -407,12 +409,12 @@ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gtk_size_group_add_widget(sg, label); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); - show_combo = gtk_combo_box_new_text(); - gtk_combo_box_append_text(GTK_COMBO_BOX(show_combo), "default"); - gtk_combo_box_append_text(GTK_COMBO_BOX(show_combo), "away"); - gtk_combo_box_append_text(GTK_COMBO_BOX(show_combo), "dnd"); - gtk_combo_box_append_text(GTK_COMBO_BOX(show_combo), "xa"); - gtk_combo_box_append_text(GTK_COMBO_BOX(show_combo), "chat"); + show_combo = gtk_combo_box_text_new(); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(show_combo), "default"); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(show_combo), "away"); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(show_combo), "dnd"); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(show_combo), "xa"); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(show_combo), "chat"); gtk_combo_box_set_active(GTK_COMBO_BOX(show_combo), 0); gtk_box_pack_start(GTK_BOX(hbox), show_combo, FALSE, FALSE, 0); @@ -450,10 +452,10 @@ } to = gtk_entry_get_text(GTK_ENTRY(to_entry)); - type = gtk_combo_box_get_active_text(GTK_COMBO_BOX(type_combo)); + type = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(type_combo)); if (!strcmp(type, "default")) type = ""; - show = gtk_combo_box_get_active_text(GTK_COMBO_BOX(show_combo)); + show = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(show_combo)); if (!strcmp(show, "default")) show = ""; status = gtk_entry_get_text(GTK_ENTRY(status_entry)); @@ -520,7 +522,8 @@ GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); - gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); + /* TODO: find a way to create a dialog without separtor in gtk+ 3 */ + /*gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE);*/ gtk_dialog_set_default_response (GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT); gtk_container_set_border_width(GTK_CONTAINER(dialog), 12); #if GTK_CHECK_VERSION(2,14,0) @@ -547,12 +550,12 @@ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gtk_size_group_add_widget(sg, label); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); - type_combo = gtk_combo_box_new_text(); - gtk_combo_box_append_text(GTK_COMBO_BOX(type_combo), "chat"); - gtk_combo_box_append_text(GTK_COMBO_BOX(type_combo), "headline"); - gtk_combo_box_append_text(GTK_COMBO_BOX(type_combo), "groupchat"); - gtk_combo_box_append_text(GTK_COMBO_BOX(type_combo), "normal"); - gtk_combo_box_append_text(GTK_COMBO_BOX(type_combo), "error"); + type_combo = gtk_combo_box_text_new(); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(type_combo), "chat"); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(type_combo), "headline"); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(type_combo), "groupchat"); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(type_combo), "normal"); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(type_combo), "error"); gtk_combo_box_set_active(GTK_COMBO_BOX(type_combo), 0); gtk_box_pack_start(GTK_BOX(hbox), type_combo, FALSE, FALSE, 0); @@ -613,7 +616,8 @@ *to ? to : "", *to ? "'" : "", g_random_int(), - gtk_combo_box_get_active_text(GTK_COMBO_BOX(type_combo)), + gtk_combo_box_text_get_active_text( + GTK_COMBO_BOX_TEXT(type_combo)), *body ? "" : "", *body ? body : "", @@ -643,7 +647,8 @@ if (!console) return; - gtk_combo_box_append_text(GTK_COMBO_BOX(console->dropdown), purple_account_get_username(gc->account)); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(console->dropdown), + purple_account_get_username(gc->account)); console->accounts = g_list_append(console->accounts, gc); console->count++; @@ -674,7 +679,7 @@ if (l == NULL) return; - gtk_combo_box_remove_text(GTK_COMBO_BOX(console->dropdown), i); + gtk_combo_box_text_remove(GTK_COMBO_BOX_TEXT(console->dropdown), i); console->accounts = g_list_remove(console->accounts, gc); console->count--; @@ -716,7 +721,7 @@ } static void -console_destroy(GtkObject *window, gpointer nul) +console_destroy(GtkWidget *window, gpointer nul) { g_list_free(console->accounts); g_free(console); @@ -731,8 +736,9 @@ if (!console) return; - account = purple_accounts_find(gtk_combo_box_get_active_text(GTK_COMBO_BOX(console->dropdown)), - "prpl-jabber"); + account = + purple_accounts_find(gtk_combo_box_text_get_active_text( + GTK_COMBO_BOX_TEXT(console->dropdown)), "prpl-jabber"); if (!account || !account->gc) return; @@ -768,13 +774,13 @@ label = gtk_label_new(_("Account: ")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_box_pack_start(GTK_BOX(console->hbox), label, FALSE, FALSE, 0); - console->dropdown = gtk_combo_box_new_text(); + console->dropdown = gtk_combo_box_text_new(); for (connections = purple_connections_get_all(); connections; connections = connections->next) { PurpleConnection *gc = connections->data; if (!strcmp(purple_account_get_protocol_id(purple_connection_get_account(gc)), "prpl-jabber")) { console->count++; console->accounts = g_list_append(console->accounts, gc); - gtk_combo_box_append_text(GTK_COMBO_BOX(console->dropdown), + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(console->dropdown), purple_account_get_username(purple_connection_get_account(gc))); if (!console->gc) console->gc = gc;