Changeset 53372 in webkit


Ignore:
Timestamp:
Jan 17, 2010 9:54:48 AM (14 years ago)
Author:
eric@webkit.org
Message:

2010-01-17 Martin Robinson <martin.james.robinson@gmail.com>

Reviewed by Gustavo Noronha Silva.

[GTK] GtkWebKit incompatible with rgba colormaps
https://bugs.webkit.org/show_bug.cgi?id=20736

Fix GTK theme rendering onto drawables with RGBA colormaps. Now
each type of colormap has its own collection of GtkWidgets.

This fix does not introduce any functionality changes, so does not
includes new tests.

  • platform/gtk/RenderThemeGtk.cpp: (WebCore::RenderThemeGtk::RenderThemeGtk): (WebCore::RenderThemeGtk::~RenderThemeGtk): (WebCore::RenderThemeGtk::partsForDrawable): (WebCore::adjustMozillaStyle): (WebCore::setMozillaState): (WebCore::paintMozillaGtkWidget): (WebCore::setToggleSize): (WebCore::RenderThemeGtk::setCheckboxSize): (WebCore::RenderThemeGtk::paintCheckbox): (WebCore::RenderThemeGtk::setRadioSize): (WebCore::RenderThemeGtk::paintRadio): (WebCore::RenderThemeGtk::paintButton): (WebCore::RenderThemeGtk::adjustMenuListStyle): (WebCore::RenderThemeGtk::paintMenuList): (WebCore::RenderThemeGtk::adjustTextFieldStyle): (WebCore::RenderThemeGtk::paintTextField): (WebCore::RenderThemeGtk::paintSearchFieldResultsButton): (WebCore::RenderThemeGtk::paintSearchFieldResultsDecoration): (WebCore::RenderThemeGtk::paintSearchFieldCancelButton):
  • platform/gtk/RenderThemeGtk.h:
  • platform/gtk/gtk2drawing.c: (moz_gtk_use_theme_parts): (ensure_window_widget): (setup_widget_prototype): (ensure_button_widget): (ensure_hpaned_widget): (ensure_vpaned_widget): (ensure_toggle_button_widget): (ensure_button_arrow_widget): (ensure_checkbox_widget): (ensure_radiobutton_widget): (ensure_scrollbar_widget): (ensure_spin_widget): (ensure_scale_widget): (ensure_entry_widget): (moz_gtk_get_combo_box_inner_button): (moz_gtk_get_combo_box_button_inner_widgets): (ensure_combo_box_widgets): (moz_gtk_get_combo_box_entry_inner_widgets): (moz_gtk_get_combo_box_entry_arrow): (ensure_combo_box_entry_widgets): (ensure_handlebox_widget): (ensure_toolbar_widget): (ensure_toolbar_separator_widget): (ensure_tooltip_widget): (ensure_tab_widget): (ensure_progress_widget): (ensure_statusbar_widget): (ensure_frame_widget): (ensure_menu_bar_widget): (ensure_menu_bar_item_widget): (ensure_menu_popup_widget): (ensure_menu_item_widget): (ensure_image_menu_item_widget): (ensure_menu_separator_widget): (ensure_check_menu_item_widget): (ensure_tree_view_widget): (ensure_tree_header_cell_widget): (ensure_expander_widget): (ensure_scrolled_window_widget): (moz_gtk_checkbox_get_metrics): (moz_gtk_radio_get_metrics): (moz_gtk_splitter_get_metrics): (moz_gtk_toggle_paint): (moz_gtk_scrollbar_button_paint): (moz_gtk_scrollbar_trough_paint): (moz_gtk_scrollbar_thumb_paint): (moz_gtk_spin_paint): (moz_gtk_spin_updown_paint): (moz_gtk_scale_paint): (moz_gtk_scale_thumb_paint): (moz_gtk_gripper_paint): (moz_gtk_hpaned_paint): (moz_gtk_vpaned_paint): (moz_gtk_caret_paint): (moz_gtk_treeview_paint): (moz_gtk_tree_header_cell_paint): (moz_gtk_tree_header_sort_arrow_paint): (moz_gtk_treeview_expander_paint): (moz_gtk_expander_paint): (moz_gtk_combo_box_paint): (moz_gtk_downarrow_paint): (moz_gtk_combo_box_entry_button_paint): (moz_gtk_container_paint): (moz_gtk_toggle_label_paint): (moz_gtk_toolbar_paint): (moz_gtk_toolbar_separator_paint): (moz_gtk_tooltip_paint): (moz_gtk_resizer_paint): (moz_gtk_frame_paint): (moz_gtk_progressbar_paint): (moz_gtk_progress_chunk_paint): (moz_gtk_get_tab_thickness): (moz_gtk_tab_paint): (moz_gtk_tabpanels_paint): (moz_gtk_tab_scroll_arrow_paint): (moz_gtk_menu_bar_paint): (moz_gtk_menu_popup_paint): (moz_gtk_menu_separator_paint): (moz_gtk_menu_item_paint): (moz_gtk_menu_arrow_paint): (moz_gtk_check_menu_item_paint): (moz_gtk_window_paint): (moz_gtk_get_widget_border): (moz_gtk_get_combo_box_entry_button_size): (moz_gtk_get_tab_scroll_arrow_size): (moz_gtk_get_downarrow_size): (moz_gtk_get_toolbar_separator_width): (moz_gtk_get_expander_size): (moz_gtk_get_treeview_expander_size): (moz_gtk_get_menu_separator_height): (moz_gtk_get_scalethumb_metrics): (moz_gtk_get_scrollbar_metrics): (moz_gtk_images_in_menus): (moz_gtk_widget_paint): (moz_gtk_get_scrollbar_widget): (moz_gtk_shutdown): (moz_gtk_destroy_theme_parts_widgets):
  • platform/gtk/gtkdrawing.h:
Location:
trunk/WebCore
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r53371 r53372  
     12010-01-17  Martin Robinson  <martin.james.robinson@gmail.com>
     2
     3        Reviewed by Gustavo Noronha Silva.
     4
     5        [GTK] GtkWebKit incompatible with rgba colormaps
     6        https://bugs.webkit.org/show_bug.cgi?id=20736
     7
     8        Fix GTK theme rendering onto drawables with RGBA colormaps. Now
     9        each type of colormap has its own collection of GtkWidgets.
     10
     11        This fix does not introduce any functionality changes, so does not
     12        includes new tests.
     13
     14        * platform/gtk/RenderThemeGtk.cpp:
     15        (WebCore::RenderThemeGtk::RenderThemeGtk):
     16        (WebCore::RenderThemeGtk::~RenderThemeGtk):
     17        (WebCore::RenderThemeGtk::partsForDrawable):
     18        (WebCore::adjustMozillaStyle):
     19        (WebCore::setMozillaState):
     20        (WebCore::paintMozillaGtkWidget):
     21        (WebCore::setToggleSize):
     22        (WebCore::RenderThemeGtk::setCheckboxSize):
     23        (WebCore::RenderThemeGtk::paintCheckbox):
     24        (WebCore::RenderThemeGtk::setRadioSize):
     25        (WebCore::RenderThemeGtk::paintRadio):
     26        (WebCore::RenderThemeGtk::paintButton):
     27        (WebCore::RenderThemeGtk::adjustMenuListStyle):
     28        (WebCore::RenderThemeGtk::paintMenuList):
     29        (WebCore::RenderThemeGtk::adjustTextFieldStyle):
     30        (WebCore::RenderThemeGtk::paintTextField):
     31        (WebCore::RenderThemeGtk::paintSearchFieldResultsButton):
     32        (WebCore::RenderThemeGtk::paintSearchFieldResultsDecoration):
     33        (WebCore::RenderThemeGtk::paintSearchFieldCancelButton):
     34        * platform/gtk/RenderThemeGtk.h:
     35        * platform/gtk/gtk2drawing.c:
     36        (moz_gtk_use_theme_parts):
     37        (ensure_window_widget):
     38        (setup_widget_prototype):
     39        (ensure_button_widget):
     40        (ensure_hpaned_widget):
     41        (ensure_vpaned_widget):
     42        (ensure_toggle_button_widget):
     43        (ensure_button_arrow_widget):
     44        (ensure_checkbox_widget):
     45        (ensure_radiobutton_widget):
     46        (ensure_scrollbar_widget):
     47        (ensure_spin_widget):
     48        (ensure_scale_widget):
     49        (ensure_entry_widget):
     50        (moz_gtk_get_combo_box_inner_button):
     51        (moz_gtk_get_combo_box_button_inner_widgets):
     52        (ensure_combo_box_widgets):
     53        (moz_gtk_get_combo_box_entry_inner_widgets):
     54        (moz_gtk_get_combo_box_entry_arrow):
     55        (ensure_combo_box_entry_widgets):
     56        (ensure_handlebox_widget):
     57        (ensure_toolbar_widget):
     58        (ensure_toolbar_separator_widget):
     59        (ensure_tooltip_widget):
     60        (ensure_tab_widget):
     61        (ensure_progress_widget):
     62        (ensure_statusbar_widget):
     63        (ensure_frame_widget):
     64        (ensure_menu_bar_widget):
     65        (ensure_menu_bar_item_widget):
     66        (ensure_menu_popup_widget):
     67        (ensure_menu_item_widget):
     68        (ensure_image_menu_item_widget):
     69        (ensure_menu_separator_widget):
     70        (ensure_check_menu_item_widget):
     71        (ensure_tree_view_widget):
     72        (ensure_tree_header_cell_widget):
     73        (ensure_expander_widget):
     74        (ensure_scrolled_window_widget):
     75        (moz_gtk_checkbox_get_metrics):
     76        (moz_gtk_radio_get_metrics):
     77        (moz_gtk_splitter_get_metrics):
     78        (moz_gtk_toggle_paint):
     79        (moz_gtk_scrollbar_button_paint):
     80        (moz_gtk_scrollbar_trough_paint):
     81        (moz_gtk_scrollbar_thumb_paint):
     82        (moz_gtk_spin_paint):
     83        (moz_gtk_spin_updown_paint):
     84        (moz_gtk_scale_paint):
     85        (moz_gtk_scale_thumb_paint):
     86        (moz_gtk_gripper_paint):
     87        (moz_gtk_hpaned_paint):
     88        (moz_gtk_vpaned_paint):
     89        (moz_gtk_caret_paint):
     90        (moz_gtk_treeview_paint):
     91        (moz_gtk_tree_header_cell_paint):
     92        (moz_gtk_tree_header_sort_arrow_paint):
     93        (moz_gtk_treeview_expander_paint):
     94        (moz_gtk_expander_paint):
     95        (moz_gtk_combo_box_paint):
     96        (moz_gtk_downarrow_paint):
     97        (moz_gtk_combo_box_entry_button_paint):
     98        (moz_gtk_container_paint):
     99        (moz_gtk_toggle_label_paint):
     100        (moz_gtk_toolbar_paint):
     101        (moz_gtk_toolbar_separator_paint):
     102        (moz_gtk_tooltip_paint):
     103        (moz_gtk_resizer_paint):
     104        (moz_gtk_frame_paint):
     105        (moz_gtk_progressbar_paint):
     106        (moz_gtk_progress_chunk_paint):
     107        (moz_gtk_get_tab_thickness):
     108        (moz_gtk_tab_paint):
     109        (moz_gtk_tabpanels_paint):
     110        (moz_gtk_tab_scroll_arrow_paint):
     111        (moz_gtk_menu_bar_paint):
     112        (moz_gtk_menu_popup_paint):
     113        (moz_gtk_menu_separator_paint):
     114        (moz_gtk_menu_item_paint):
     115        (moz_gtk_menu_arrow_paint):
     116        (moz_gtk_check_menu_item_paint):
     117        (moz_gtk_window_paint):
     118        (moz_gtk_get_widget_border):
     119        (moz_gtk_get_combo_box_entry_button_size):
     120        (moz_gtk_get_tab_scroll_arrow_size):
     121        (moz_gtk_get_downarrow_size):
     122        (moz_gtk_get_toolbar_separator_width):
     123        (moz_gtk_get_expander_size):
     124        (moz_gtk_get_treeview_expander_size):
     125        (moz_gtk_get_menu_separator_height):
     126        (moz_gtk_get_scalethumb_metrics):
     127        (moz_gtk_get_scrollbar_metrics):
     128        (moz_gtk_images_in_menus):
     129        (moz_gtk_widget_paint):
     130        (moz_gtk_get_scrollbar_widget):
     131        (moz_gtk_shutdown):
     132        (moz_gtk_destroy_theme_parts_widgets):
     133        * platform/gtk/gtkdrawing.h:
     134
    11352010-01-16  Maciej Stachowiak  <mjs@apple.com>
    2136
  • trunk/WebCore/platform/gtk/RenderThemeGtk.cpp

    r52421 r53372  
    3737#include "gtkdrawing.h"
    3838
     39#include <gdk/gdk.h>
    3940#include <gtk/gtk.h>
    40 #include <gdk/gdk.h>
    4141
    4242namespace WebCore {
     
    138138    , m_seekBackButton(0)
    139139    , m_seekForwardButton(0)
    140 {
    141     if (!mozGtkRefCount)
     140    , m_partsTable(adoptGRef(g_hash_table_new_full(0, 0, 0, g_free)))
     141{
     142    if (!mozGtkRefCount) {
    142143        moz_gtk_init();
     144
     145        // Use the theme parts for the default drawable.
     146        moz_gtk_use_theme_parts(partsForDrawable(0));
     147    }
    143148
    144149    ++mozGtkRefCount;
     
    163168    m_seekBackButton.clear();
    164169    m_seekForwardButton.clear();
     170
     171    GList* values = g_hash_table_get_values(m_partsTable.get());
     172    for (guint i = 0; i < g_list_length(values); i++)
     173        moz_gtk_destroy_theme_parts_widgets(
     174            static_cast<GtkThemeParts*>(g_list_nth_data(values, i)));
     175}
     176
     177GtkThemeParts* RenderThemeGtk::partsForDrawable(GdkDrawable* drawable) const
     178{
     179    // A null drawable represents the default screen colormap.
     180    GdkColormap* colormap = 0;
     181    if (!drawable)
     182        colormap = gdk_screen_get_default_colormap(gdk_screen_get_default());
     183    else
     184        colormap = gdk_drawable_get_colormap(drawable);
     185
     186    GtkThemeParts* parts = static_cast<GtkThemeParts*>(g_hash_table_lookup(m_partsTable.get(), colormap));
     187    if (!parts) {
     188        parts = g_new0(GtkThemeParts, 1);
     189        parts->colormap = colormap;
     190        g_hash_table_insert(m_partsTable.get(), colormap, parts);
     191    }
     192
     193    return parts;
    165194}
    166195
     
    219248}
    220249
    221 static void adjustMozStyle(RenderStyle* style, GtkThemeWidgetType type)
     250static void adjustMozillaStyle(const RenderThemeGtk* theme, RenderStyle* style, GtkThemeWidgetType type)
    222251{
    223252    gint left, top, right, bottom;
     
    238267}
    239268
    240 static void setMozState(RenderTheme* theme, GtkWidgetState* state, RenderObject* o)
     269static void setMozillaState(const RenderTheme* theme, GtkWidgetState* state, RenderObject* o)
    241270{
    242271    state->active = theme->isPressed(o);
     
    250279}
    251280
    252 static bool paintMozWidget(RenderTheme* theme, GtkThemeWidgetType type, RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& rect)
     281static bool paintMozillaGtkWidget(const RenderThemeGtk* theme, GtkThemeWidgetType type, RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& rect)
    253282{
    254283    // No GdkWindow to render to, so return true to fall back
     
    261290
    262291    GtkWidgetState mozState;
    263     setMozState(theme, &mozState, o);
     292    setMozillaState(theme, &mozState, o);
    264293
    265294    int flags;
     
    299328    gdk_rectangle_intersect(&gdkRect, &gdkClipRect, &gdkClipRect);
    300329
     330    // Since the theme renderer is going to be drawing onto this GdkDrawable,
     331    // select the appropriate widgets for the drawable depth.
     332    moz_gtk_use_theme_parts(theme->partsForDrawable(i.context->gdkDrawable()));
    301333    return moz_gtk_widget_paint(type, i.context->gdkDrawable(), &gdkRect, &gdkClipRect, &mozState, flags, direction) != MOZ_GTK_SUCCESS;
    302334}
     
    312344}
    313345
    314 static void setToggleSize(RenderStyle* style, ControlPart appearance)
     346static void setToggleSize(const RenderThemeGtk* theme, RenderStyle* style, ControlPart appearance)
    315347{
    316348    // The width and height are both specified, so we shouldn't change them.
     
    346378void RenderThemeGtk::setCheckboxSize(RenderStyle* style) const
    347379{
    348     setToggleSize(style, RadioPart);
     380    setToggleSize(this, style, RadioPart);
    349381}
    350382
    351383bool RenderThemeGtk::paintCheckbox(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& rect)
    352384{
    353     return paintMozWidget(this, MOZ_GTK_CHECKBUTTON, o, i, rect);
     385    return paintMozillaGtkWidget(this, MOZ_GTK_CHECKBUTTON, o, i, rect);
    354386}
    355387
    356388void RenderThemeGtk::setRadioSize(RenderStyle* style) const
    357389{
    358     setToggleSize(style, RadioPart);
     390    setToggleSize(this, style, RadioPart);
    359391}
    360392
    361393bool RenderThemeGtk::paintRadio(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& rect)
    362394{
    363     return paintMozWidget(this, MOZ_GTK_RADIOBUTTON, o, i, rect);
     395    return paintMozillaGtkWidget(this, MOZ_GTK_RADIOBUTTON, o, i, rect);
    364396}
    365397
     
    382414bool RenderThemeGtk::paintButton(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& rect)
    383415{
    384     return paintMozWidget(this, MOZ_GTK_BUTTON, o, i, rect);
     416    return paintMozillaGtkWidget(this, MOZ_GTK_BUTTON, o, i, rect);
    385417}
    386418
     
    391423    style->setHeight(Length(Auto));
    392424    style->setWhiteSpace(PRE);
    393     adjustMozStyle(style, MOZ_GTK_DROPDOWN);
     425    adjustMozillaStyle(this, style, MOZ_GTK_DROPDOWN);
    394426}
    395427
    396428bool RenderThemeGtk::paintMenuList(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& rect)
    397429{
    398     return paintMozWidget(this, MOZ_GTK_DROPDOWN, o, i, rect);
     430    return paintMozillaGtkWidget(this, MOZ_GTK_DROPDOWN, o, i, rect);
    399431}
    400432
     
    405437    style->setHeight(Length(Auto));
    406438    style->setWhiteSpace(PRE);
    407     adjustMozStyle(style, MOZ_GTK_ENTRY);
     439    adjustMozillaStyle(this, style, MOZ_GTK_ENTRY);
    408440}
    409441
    410442bool RenderThemeGtk::paintTextField(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& rect)
    411443{
    412     return paintMozWidget(this, MOZ_GTK_ENTRY, o, i, rect);
     444    return paintMozillaGtkWidget(this, MOZ_GTK_ENTRY, o, i, rect);
    413445}
    414446
     
    425457bool RenderThemeGtk::paintSearchFieldResultsButton(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& rect)
    426458{
    427     return paintMozWidget(this, MOZ_GTK_DROPDOWN_ARROW, o, i, rect);
     459    return paintMozillaGtkWidget(this, MOZ_GTK_DROPDOWN_ARROW, o, i, rect);
    428460}
    429461
     
    441473bool RenderThemeGtk::paintSearchFieldResultsDecoration(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& rect)
    442474{
    443     return paintMozWidget(this, MOZ_GTK_CHECKMENUITEM, o, i, rect);
     475    return paintMozillaGtkWidget(this, MOZ_GTK_CHECKMENUITEM, o, i, rect);
    444476}
    445477
     
    457489bool RenderThemeGtk::paintSearchFieldCancelButton(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& rect)
    458490{
    459     return paintMozWidget(this, MOZ_GTK_CHECKMENUITEM, o, i, rect);
     491    return paintMozillaGtkWidget(this, MOZ_GTK_CHECKMENUITEM, o, i, rect);
    460492}
    461493
  • trunk/WebCore/platform/gtk/RenderThemeGtk.h

    r52421 r53372  
    2626 */
    2727
    28 #ifndef RenderThemeGdk_h
    29 #define RenderThemeGdk_h
     28#ifndef RenderThemeGtk_h
     29#define RenderThemeGtk_h
    3030
     31#include "GRefPtr.h"
    3132#include "RenderTheme.h"
    3233
     
    3738typedef struct _GdkDrawable GdkDrawable;
    3839typedef struct _GtkBorder GtkBorder;
     40typedef struct _GtkThemeParts GtkThemeParts;
    3941
    4042namespace WebCore {
     
    8789    virtual String extraMediaControlsStyleSheet();
    8890#endif
     91
     92    GtkThemeParts* partsForDrawable(GdkDrawable*) const;
    8993
    9094protected:
     
    144148    GtkContainer* gtkContainer() const;
    145149
    146 private:
    147150    mutable GtkWidget* m_gtkWindow;
    148151    mutable GtkContainer* m_gtkContainer;
     
    166169    RefPtr<Image> m_seekBackButton;
    167170    RefPtr<Image> m_seekForwardButton;
     171    Page* m_page;
     172    GRefPtr<GHashTable> m_partsTable;
    168173
    169174};
     
    171176}
    172177
    173 #endif
     178#endif // RenderThemeGtk_h
  • trunk/WebCore/platform/gtk/gtk2drawing.c

    r52421 r53372  
    5757#define WINDOW_IS_MAPPED(window) ((window) && GDK_IS_WINDOW(window) && gdk_window_is_visible(window))
    5858
    59 static GtkWidget* gProtoWindow;
    60 static GtkWidget* gProtoLayout;
    61 static GtkWidget* gButtonWidget;
    62 static GtkWidget* gToggleButtonWidget;
    63 static GtkWidget* gButtonArrowWidget;
    64 static GtkWidget* gCheckboxWidget;
    65 static GtkWidget* gRadiobuttonWidget;
    66 static GtkWidget* gHorizScrollbarWidget;
    67 static GtkWidget* gVertScrollbarWidget;
    68 static GtkWidget* gSpinWidget;
    69 static GtkWidget* gHScaleWidget;
    70 static GtkWidget* gVScaleWidget;
    71 static GtkWidget* gEntryWidget;
    72 static GtkWidget* gComboBoxWidget;
    73 static GtkWidget* gComboBoxButtonWidget;
    74 static GtkWidget* gComboBoxArrowWidget;
    75 static GtkWidget* gComboBoxSeparatorWidget;
    76 static GtkWidget* gComboBoxEntryWidget;
    77 static GtkWidget* gComboBoxEntryTextareaWidget;
    78 static GtkWidget* gComboBoxEntryButtonWidget;
    79 static GtkWidget* gComboBoxEntryArrowWidget;
    80 static GtkWidget* gHandleBoxWidget;
    81 static GtkWidget* gToolbarWidget;
    82 static GtkWidget* gFrameWidget;
    83 static GtkWidget* gStatusbarWidget;
    84 static GtkWidget* gProgressWidget;
    85 static GtkWidget* gTabWidget;
    86 static GtkWidget* gTooltipWidget;
    87 static GtkWidget* gMenuBarWidget;
    88 static GtkWidget* gMenuBarItemWidget;
    89 static GtkWidget* gMenuPopupWidget;
    90 static GtkWidget* gMenuItemWidget;
    91 static GtkWidget* gImageMenuItemWidget;
    92 static GtkWidget* gCheckMenuItemWidget;
    93 static GtkWidget* gTreeViewWidget;
    94 static GtkTreeViewColumn* gMiddleTreeViewColumn;
    95 static GtkWidget* gTreeHeaderCellWidget;
    96 static GtkWidget* gTreeHeaderSortArrowWidget;
    97 static GtkWidget* gExpanderWidget;
    98 static GtkWidget* gToolbarSeparatorWidget;
    99 static GtkWidget* gMenuSeparatorWidget;
    100 static GtkWidget* gHPanedWidget;
    101 static GtkWidget* gVPanedWidget;
    102 static GtkWidget* gScrolledWindowWidget;
    103 
     59static GtkThemeParts *gParts = NULL;
    10460static style_prop_t style_prop_func;
    10561static gboolean have_arrow_scaling;
    10662static gboolean is_initialized;
     63
     64void
     65moz_gtk_use_theme_parts(GtkThemeParts* parts)
     66{
     67    gParts = parts;
     68}
    10769
    10870/* Because we have such an unconventional way of drawing widgets, signal to the GTK theme engine
     
    12587ensure_window_widget()
    12688{
    127     if (!gProtoWindow) {
    128         gProtoWindow = gtk_window_new(GTK_WINDOW_POPUP);
    129         gtk_widget_realize(gProtoWindow);
    130         moz_gtk_set_widget_name(gProtoWindow);
     89    if (!gParts->protoWindow) {
     90        gParts->protoWindow = gtk_window_new(GTK_WINDOW_POPUP);
     91
     92        if (gParts->colormap)
     93            gtk_widget_set_colormap(gParts->protoWindow, gParts->colormap);
     94
     95        gtk_widget_realize(gParts->protoWindow);
     96        moz_gtk_set_widget_name(gParts->protoWindow);
    13197    }
    13298    return MOZ_GTK_SUCCESS;
     
    137103{
    138104    ensure_window_widget();
    139     if (!gProtoLayout) {
    140         gProtoLayout = gtk_fixed_new();
    141         gtk_container_add(GTK_CONTAINER(gProtoWindow), gProtoLayout);
    142     }
    143 
    144     gtk_container_add(GTK_CONTAINER(gProtoLayout), widget);
     105    if (!gParts->protoLayout) {
     106        gParts->protoLayout = gtk_fixed_new();
     107        gtk_container_add(GTK_CONTAINER(gParts->protoWindow), gParts->protoLayout);
     108    }
     109
     110    gtk_container_add(GTK_CONTAINER(gParts->protoLayout), widget);
    145111    gtk_widget_realize(widget);
    146112    g_object_set_data(G_OBJECT(widget), "transparent-bg-hint", GINT_TO_POINTER(TRUE));
     
    151117ensure_button_widget()
    152118{
    153     if (!gButtonWidget) {
    154         gButtonWidget = gtk_button_new_with_label("M");
    155         setup_widget_prototype(gButtonWidget);
     119    if (!gParts->buttonWidget) {
     120        gParts->buttonWidget = gtk_button_new_with_label("M");
     121        setup_widget_prototype(gParts->buttonWidget);
    156122    }
    157123    return MOZ_GTK_SUCCESS;
     
    161127ensure_hpaned_widget()
    162128{
    163     if (!gHPanedWidget) {
    164         gHPanedWidget = gtk_hpaned_new();
    165         setup_widget_prototype(gHPanedWidget);
     129    if (!gParts->hpanedWidget) {
     130        gParts->hpanedWidget = gtk_hpaned_new();
     131        setup_widget_prototype(gParts->hpanedWidget);
    166132    }
    167133    return MOZ_GTK_SUCCESS;
     
    171137ensure_vpaned_widget()
    172138{
    173     if (!gVPanedWidget) {
    174         gVPanedWidget = gtk_vpaned_new();
    175         setup_widget_prototype(gVPanedWidget);
     139    if (!gParts->vpanedWidget) {
     140        gParts->vpanedWidget = gtk_vpaned_new();
     141        setup_widget_prototype(gParts->vpanedWidget);
    176142    }
    177143    return MOZ_GTK_SUCCESS;
     
    181147ensure_toggle_button_widget()
    182148{
    183     if (!gToggleButtonWidget) {
    184         gToggleButtonWidget = gtk_toggle_button_new();
    185         setup_widget_prototype(gToggleButtonWidget);
     149    if (!gParts->toggleButtonWidget) {
     150        gParts->toggleButtonWidget = gtk_toggle_button_new();
     151        setup_widget_prototype(gParts->toggleButtonWidget);
    186152        /* toggle button must be set active to get the right style on hover. */
    187         GTK_TOGGLE_BUTTON(gToggleButtonWidget)->active = TRUE;
     153        GTK_TOGGLE_BUTTON(gParts->toggleButtonWidget)->active = TRUE;
    188154  }
    189155  return MOZ_GTK_SUCCESS;
     
    193159ensure_button_arrow_widget()
    194160{
    195     if (!gButtonArrowWidget) {
     161    if (!gParts->buttonArrowWidget) {
    196162        ensure_toggle_button_widget();
    197163
    198         gButtonArrowWidget = gtk_arrow_new(GTK_ARROW_DOWN, GTK_SHADOW_OUT);
    199         gtk_container_add(GTK_CONTAINER(gToggleButtonWidget), gButtonArrowWidget);
    200         gtk_widget_realize(gButtonArrowWidget);
     164        gParts->buttonArrowWidget = gtk_arrow_new(GTK_ARROW_DOWN, GTK_SHADOW_OUT);
     165        gtk_container_add(GTK_CONTAINER(gParts->toggleButtonWidget), gParts->buttonArrowWidget);
     166        gtk_widget_realize(gParts->buttonArrowWidget);
    201167    }
    202168    return MOZ_GTK_SUCCESS;
     
    206172ensure_checkbox_widget()
    207173{
    208     if (!gCheckboxWidget) {
    209         gCheckboxWidget = gtk_check_button_new_with_label("M");
    210         setup_widget_prototype(gCheckboxWidget);
     174    if (!gParts->checkboxWidget) {
     175        gParts->checkboxWidget = gtk_check_button_new_with_label("M");
     176        setup_widget_prototype(gParts->checkboxWidget);
    211177    }
    212178    return MOZ_GTK_SUCCESS;
     
    216182ensure_radiobutton_widget()
    217183{
    218     if (!gRadiobuttonWidget) {
    219         gRadiobuttonWidget = gtk_radio_button_new_with_label(NULL, "M");
    220         setup_widget_prototype(gRadiobuttonWidget);
     184    if (!gParts->radiobuttonWidget) {
     185        gParts->radiobuttonWidget = gtk_radio_button_new_with_label(NULL, "M");
     186        setup_widget_prototype(gParts->radiobuttonWidget);
    221187    }
    222188    return MOZ_GTK_SUCCESS;
     
    226192ensure_scrollbar_widget()
    227193{
    228     if (!gVertScrollbarWidget) {
    229         gVertScrollbarWidget = gtk_vscrollbar_new(NULL);
    230         setup_widget_prototype(gVertScrollbarWidget);
    231     }
    232     if (!gHorizScrollbarWidget) {
    233         gHorizScrollbarWidget = gtk_hscrollbar_new(NULL);
    234         setup_widget_prototype(gHorizScrollbarWidget);
     194    if (!gParts->vertScrollbarWidget) {
     195        gParts->vertScrollbarWidget = gtk_vscrollbar_new(NULL);
     196        setup_widget_prototype(gParts->vertScrollbarWidget);
     197    }
     198    if (!gParts->horizScrollbarWidget) {
     199        gParts->horizScrollbarWidget = gtk_hscrollbar_new(NULL);
     200        setup_widget_prototype(gParts->horizScrollbarWidget);
    235201    }
    236202    return MOZ_GTK_SUCCESS;
     
    240206ensure_spin_widget()
    241207{
    242   if (!gSpinWidget) {
    243     gSpinWidget = gtk_spin_button_new(NULL, 1, 0);
    244     setup_widget_prototype(gSpinWidget);
     208  if (!gParts->spinWidget) {
     209    gParts->spinWidget = gtk_spin_button_new(NULL, 1, 0);
     210    setup_widget_prototype(gParts->spinWidget);
    245211  }
    246212  return MOZ_GTK_SUCCESS;
     
    250216ensure_scale_widget()
    251217{
    252   if (!gHScaleWidget) {
    253     gHScaleWidget = gtk_hscale_new(NULL);
    254     setup_widget_prototype(gHScaleWidget);
     218  if (!gParts->hScaleWidget) {
     219    gParts->hScaleWidget = gtk_hscale_new(NULL);
     220    setup_widget_prototype(gParts->hScaleWidget);
    255221  }
    256   if (!gVScaleWidget) {
    257     gVScaleWidget = gtk_vscale_new(NULL);
    258     setup_widget_prototype(gVScaleWidget);
     222  if (!gParts->vScaleWidget) {
     223    gParts->vScaleWidget = gtk_vscale_new(NULL);
     224    setup_widget_prototype(gParts->vScaleWidget);
    259225  }
    260226  return MOZ_GTK_SUCCESS;
     
    264230ensure_entry_widget()
    265231{
    266     if (!gEntryWidget) {
    267         gEntryWidget = gtk_entry_new();
    268         setup_widget_prototype(gEntryWidget);
     232    if (!gParts->entryWidget) {
     233        gParts->entryWidget = gtk_entry_new();
     234        setup_widget_prototype(gParts->entryWidget);
    269235    }
    270236    return MOZ_GTK_SUCCESS;
     
    279245 * Note that if we don't find the inner widgets (which shouldn't happen), we
    280246 * fallback to use generic "non-inner" widgets, and they don't need that kind
    281  * of weak pointer since they are explicit children of gProtoWindow and as
     247 * of weak pointer since they are explicit children of gParts->protoWindow and as
    282248 * such GTK holds a strong reference to them. */
    283249static void
     
    285251{
    286252    if (GTK_IS_TOGGLE_BUTTON(widget)) {
    287         gComboBoxButtonWidget = widget;
     253        gParts->comboBoxButtonWidget = widget;
    288254        g_object_add_weak_pointer(G_OBJECT(widget),
    289                                   (gpointer) &gComboBoxButtonWidget);
     255                                  (gpointer) &gParts->comboBoxButtonWidget);
    290256        gtk_widget_realize(widget);
    291257        g_object_set_data(G_OBJECT(widget), "transparent-bg-hint", GINT_TO_POINTER(TRUE));
     
    298264{
    299265    if (GTK_IS_SEPARATOR(widget)) {
    300         gComboBoxSeparatorWidget = widget;
     266        gParts->comboBoxSeparatorWidget = widget;
    301267        g_object_add_weak_pointer(G_OBJECT(widget),
    302                                   (gpointer) &gComboBoxSeparatorWidget);
     268                                  (gpointer) &gParts->comboBoxSeparatorWidget);
    303269    } else if (GTK_IS_ARROW(widget)) {
    304         gComboBoxArrowWidget = widget;
     270        gParts->comboBoxArrowWidget = widget;
    305271        g_object_add_weak_pointer(G_OBJECT(widget),
    306                                   (gpointer) &gComboBoxArrowWidget);
     272                                  (gpointer) &gParts->comboBoxArrowWidget);
    307273    } else
    308274        return;
     
    316282    GtkWidget* buttonChild;
    317283
    318     if (gComboBoxButtonWidget && gComboBoxArrowWidget)
     284    if (gParts->comboBoxButtonWidget && gParts->comboBoxArrowWidget)
    319285        return MOZ_GTK_SUCCESS;
    320286
    321287    /* Create a ComboBox if needed */
    322     if (!gComboBoxWidget) {
    323         gComboBoxWidget = gtk_combo_box_new();
    324         setup_widget_prototype(gComboBoxWidget);
     288    if (!gParts->comboBoxWidget) {
     289        gParts->comboBoxWidget = gtk_combo_box_new();
     290        setup_widget_prototype(gParts->comboBoxWidget);
    325291    }
    326292
    327293    /* Get its inner Button */
    328     gtk_container_forall(GTK_CONTAINER(gComboBoxWidget),
     294    gtk_container_forall(GTK_CONTAINER(gParts->comboBoxWidget),
    329295                         moz_gtk_get_combo_box_inner_button,
    330296                         NULL);
    331297
    332     if (gComboBoxButtonWidget) {
     298    if (gParts->comboBoxButtonWidget) {
    333299        /* Get the widgets inside the Button */
    334         buttonChild = GTK_BIN(gComboBoxButtonWidget)->child;
     300        buttonChild = GTK_BIN(gParts->comboBoxButtonWidget)->child;
    335301        if (GTK_IS_HBOX(buttonChild)) {
    336302            /* appears-as-list = FALSE, cell-view = TRUE; the button
     
    344310            /* appears-as-list = TRUE, or cell-view = FALSE;
    345311             * the button only contains an arrow */
    346             gComboBoxArrowWidget = buttonChild;
     312            gParts->comboBoxArrowWidget = buttonChild;
    347313            g_object_add_weak_pointer(G_OBJECT(buttonChild), (gpointer)
    348                                       &gComboBoxArrowWidget);
    349             gtk_widget_realize(gComboBoxArrowWidget);
    350             g_object_set_data(G_OBJECT(gComboBoxArrowWidget),
     314                                      &gParts->comboBoxArrowWidget);
     315            gtk_widget_realize(gParts->comboBoxArrowWidget);
     316            g_object_set_data(G_OBJECT(gParts->comboBoxArrowWidget),
    351317                              "transparent-bg-hint", GINT_TO_POINTER(TRUE));
    352318        }
     
    356322         * crashing. */
    357323        ensure_toggle_button_widget();
    358         gComboBoxButtonWidget = gToggleButtonWidget;
    359     }
    360 
    361     if (!gComboBoxArrowWidget) {
     324        gParts->comboBoxButtonWidget = gParts->toggleButtonWidget;
     325    }
     326
     327    if (!gParts->comboBoxArrowWidget) {
    362328        /* Shouldn't be reached with current internal gtk implementation;
    363          * we gButtonArrowWidget as last resort fallback to avoid
     329         * we gParts->buttonArrowWidget as last resort fallback to avoid
    364330         * crashing. */
    365331        ensure_button_arrow_widget();
    366         gComboBoxArrowWidget = gButtonArrowWidget;
    367     }
    368 
    369     /* We don't test the validity of gComboBoxSeparatorWidget since there
     332        gParts->comboBoxArrowWidget = gParts->buttonArrowWidget;
     333    }
     334
     335    /* We don't test the validity of gParts->comboBoxSeparatorWidget since there
    370336     * is none when "appears-as-list" = TRUE or "cell-view" = FALSE; if it
    371337     * is invalid we just won't paint it. */
     
    382348 * Note that if we don't find the inner widgets (which shouldn't happen), we
    383349 * fallback to use generic "non-inner" widgets, and they don't need that kind
    384  * of weak pointer since they are explicit children of gProtoWindow and as
     350 * of weak pointer since they are explicit children of gParts->protoWindow and as
    385351 * such GTK holds a strong reference to them. */
    386352static void
     
    389355{
    390356    if (GTK_IS_TOGGLE_BUTTON(widget)) {
    391         gComboBoxEntryButtonWidget = widget;
     357        gParts->comboBoxEntryButtonWidget = widget;
    392358        g_object_add_weak_pointer(G_OBJECT(widget),
    393                                   (gpointer) &gComboBoxEntryButtonWidget);
     359                                  (gpointer) &gParts->comboBoxEntryButtonWidget);
    394360    } else if (GTK_IS_ENTRY(widget)) {
    395         gComboBoxEntryTextareaWidget = widget;
     361        gParts->comboBoxEntryTextareaWidget = widget;
    396362        g_object_add_weak_pointer(G_OBJECT(widget),
    397                                   (gpointer) &gComboBoxEntryTextareaWidget);
     363                                  (gpointer) &gParts->comboBoxEntryTextareaWidget);
    398364    } else
    399365        return;
     
    406372{
    407373    if (GTK_IS_ARROW(widget)) {
    408         gComboBoxEntryArrowWidget = widget;
     374        gParts->comboBoxEntryArrowWidget = widget;
    409375        g_object_add_weak_pointer(G_OBJECT(widget),
    410                                   (gpointer) &gComboBoxEntryArrowWidget);
     376                                  (gpointer) &gParts->comboBoxEntryArrowWidget);
    411377        gtk_widget_realize(widget);
    412378        g_object_set_data(G_OBJECT(widget), "transparent-bg-hint", GINT_TO_POINTER(TRUE));
     
    419385    GtkWidget* buttonChild;
    420386
    421     if (gComboBoxEntryTextareaWidget &&
    422             gComboBoxEntryButtonWidget &&
    423             gComboBoxEntryArrowWidget)
     387    if (gParts->comboBoxEntryTextareaWidget &&
     388            gParts->comboBoxEntryButtonWidget &&
     389            gParts->comboBoxEntryArrowWidget)
    424390        return MOZ_GTK_SUCCESS;
    425391
    426392    /* Create a ComboBoxEntry if needed */
    427     if (!gComboBoxEntryWidget) {
    428         gComboBoxEntryWidget = gtk_combo_box_entry_new();
    429         setup_widget_prototype(gComboBoxEntryWidget);
     393    if (!gParts->comboBoxEntryWidget) {
     394        gParts->comboBoxEntryWidget = gtk_combo_box_entry_new();
     395        setup_widget_prototype(gParts->comboBoxEntryWidget);
    430396    }
    431397
    432398    /* Get its inner Entry and Button */
    433     gtk_container_forall(GTK_CONTAINER(gComboBoxEntryWidget),
     399    gtk_container_forall(GTK_CONTAINER(gParts->comboBoxEntryWidget),
    434400                         moz_gtk_get_combo_box_entry_inner_widgets,
    435401                         NULL);
    436402
    437     if (!gComboBoxEntryTextareaWidget) {
     403    if (!gParts->comboBoxEntryTextareaWidget) {
    438404        ensure_entry_widget();
    439         gComboBoxEntryTextareaWidget = gEntryWidget;
    440     }
    441 
    442     if (gComboBoxEntryButtonWidget) {
     405        gParts->comboBoxEntryTextareaWidget = gParts->entryWidget;
     406    }
     407
     408    if (gParts->comboBoxEntryButtonWidget) {
    443409        /* Get the Arrow inside the Button */
    444         buttonChild = GTK_BIN(gComboBoxEntryButtonWidget)->child;
     410        buttonChild = GTK_BIN(gParts->comboBoxEntryButtonWidget)->child;
    445411        if (GTK_IS_HBOX(buttonChild)) {
    446412            /* appears-as-list = FALSE, cell-view = TRUE; the button
     
    457423            /* appears-as-list = TRUE, or cell-view = FALSE;
    458424             * the button only contains an arrow */
    459             gComboBoxEntryArrowWidget = buttonChild;
     425            gParts->comboBoxEntryArrowWidget = buttonChild;
    460426            g_object_add_weak_pointer(G_OBJECT(buttonChild), (gpointer)
    461                                       &gComboBoxEntryArrowWidget);
    462             gtk_widget_realize(gComboBoxEntryArrowWidget);
    463             g_object_set_data(G_OBJECT(gComboBoxEntryArrowWidget),
     427                                      &gParts->comboBoxEntryArrowWidget);
     428            gtk_widget_realize(gParts->comboBoxEntryArrowWidget);
     429            g_object_set_data(G_OBJECT(gParts->comboBoxEntryArrowWidget),
    464430                              "transparent-bg-hint", GINT_TO_POINTER(TRUE));
    465431        }
     
    469435         * crashing. */
    470436        ensure_toggle_button_widget();
    471         gComboBoxEntryButtonWidget = gToggleButtonWidget;
    472     }
    473 
    474     if (!gComboBoxEntryArrowWidget) {
     437        gParts->comboBoxEntryButtonWidget = gParts->toggleButtonWidget;
     438    }
     439
     440    if (!gParts->comboBoxEntryArrowWidget) {
    475441        /* Shouldn't be reached with current internal gtk implementation;
    476          * we gButtonArrowWidget as last resort fallback to avoid
     442         * we gParts->buttonArrowWidget as last resort fallback to avoid
    477443         * crashing. */
    478444        ensure_button_arrow_widget();
    479         gComboBoxEntryArrowWidget = gButtonArrowWidget;
     445        gParts->comboBoxEntryArrowWidget = gParts->buttonArrowWidget;
    480446    }
    481447
     
    487453ensure_handlebox_widget()
    488454{
    489     if (!gHandleBoxWidget) {
    490         gHandleBoxWidget = gtk_handle_box_new();
    491         setup_widget_prototype(gHandleBoxWidget);
     455    if (!gParts->handleBoxWidget) {
     456        gParts->handleBoxWidget = gtk_handle_box_new();
     457        setup_widget_prototype(gParts->handleBoxWidget);
    492458    }
    493459    return MOZ_GTK_SUCCESS;
     
    497463ensure_toolbar_widget()
    498464{
    499     if (!gToolbarWidget) {
     465    if (!gParts->toolbarWidget) {
    500466        ensure_handlebox_widget();
    501         gToolbarWidget = gtk_toolbar_new();
    502         gtk_container_add(GTK_CONTAINER(gHandleBoxWidget), gToolbarWidget);
    503         gtk_widget_realize(gToolbarWidget);
    504         g_object_set_data(G_OBJECT(gToolbarWidget), "transparent-bg-hint", GINT_TO_POINTER(TRUE));
     467        gParts->toolbarWidget = gtk_toolbar_new();
     468        gtk_container_add(GTK_CONTAINER(gParts->handleBoxWidget), gParts->toolbarWidget);
     469        gtk_widget_realize(gParts->toolbarWidget);
     470        g_object_set_data(G_OBJECT(gParts->toolbarWidget), "transparent-bg-hint", GINT_TO_POINTER(TRUE));
    505471    }
    506472    return MOZ_GTK_SUCCESS;
     
    510476ensure_toolbar_separator_widget()
    511477{
    512     if (!gToolbarSeparatorWidget) {
     478    if (!gParts->toolbarSeparatorWidget) {
    513479        ensure_toolbar_widget();
    514         gToolbarSeparatorWidget = GTK_WIDGET(gtk_separator_tool_item_new());
    515         setup_widget_prototype(gToolbarSeparatorWidget);
     480        gParts->toolbarSeparatorWidget = GTK_WIDGET(gtk_separator_tool_item_new());
     481        setup_widget_prototype(gParts->toolbarSeparatorWidget);
    516482    }
    517483    return MOZ_GTK_SUCCESS;
     
    521487ensure_tooltip_widget()
    522488{
    523     if (!gTooltipWidget) {
    524         gTooltipWidget = gtk_window_new(GTK_WINDOW_POPUP);
    525         gtk_widget_realize(gTooltipWidget);
    526         moz_gtk_set_widget_name(gTooltipWidget);
     489    if (!gParts->tooltipWidget) {
     490        gParts->tooltipWidget = gtk_window_new(GTK_WINDOW_POPUP);
     491        gtk_widget_realize(gParts->tooltipWidget);
     492        moz_gtk_set_widget_name(gParts->tooltipWidget);
    527493    }
    528494    return MOZ_GTK_SUCCESS;
     
    532498ensure_tab_widget()
    533499{
    534     if (!gTabWidget) {
    535         gTabWidget = gtk_notebook_new();
    536         setup_widget_prototype(gTabWidget);
     500    if (!gParts->tabWidget) {
     501        gParts->tabWidget = gtk_notebook_new();
     502        setup_widget_prototype(gParts->tabWidget);
    537503    }
    538504    return MOZ_GTK_SUCCESS;
     
    542508ensure_progress_widget()
    543509{
    544     if (!gProgressWidget) {
    545         gProgressWidget = gtk_progress_bar_new();
    546         setup_widget_prototype(gProgressWidget);
     510    if (!gParts->progresWidget) {
     511        gParts->progresWidget = gtk_progress_bar_new();
     512        setup_widget_prototype(gParts->progresWidget);
    547513    }
    548514    return MOZ_GTK_SUCCESS;
     
    552518ensure_statusbar_widget()
    553519{
    554     if (!gStatusbarWidget) {
    555       gStatusbarWidget = gtk_statusbar_new();
    556       setup_widget_prototype(gStatusbarWidget);
     520    if (!gParts->statusbarWidget) {
     521      gParts->statusbarWidget = gtk_statusbar_new();
     522      setup_widget_prototype(gParts->statusbarWidget);
    557523    }
    558524    return MOZ_GTK_SUCCESS;
     
    562528ensure_frame_widget()
    563529{
    564     if (!gFrameWidget) {
     530    if (!gParts->frameWidget) {
    565531        ensure_statusbar_widget();
    566         gFrameWidget = gtk_frame_new(NULL);
    567         gtk_container_add(GTK_CONTAINER(gStatusbarWidget), gFrameWidget);
    568         gtk_widget_realize(gFrameWidget);
     532        gParts->frameWidget = gtk_frame_new(NULL);
     533        gtk_container_add(GTK_CONTAINER(gParts->statusbarWidget), gParts->frameWidget);
     534        gtk_widget_realize(gParts->frameWidget);
    569535    }
    570536    return MOZ_GTK_SUCCESS;
     
    574540ensure_menu_bar_widget()
    575541{
    576     if (!gMenuBarWidget) {
    577         gMenuBarWidget = gtk_menu_bar_new();
    578         setup_widget_prototype(gMenuBarWidget);
     542    if (!gParts->menuBarWidget) {
     543        gParts->menuBarWidget = gtk_menu_bar_new();
     544        setup_widget_prototype(gParts->menuBarWidget);
    579545    }
    580546    return MOZ_GTK_SUCCESS;
     
    584550ensure_menu_bar_item_widget()
    585551{
    586     if (!gMenuBarItemWidget) {
     552    if (!gParts->menuBarItemWidget) {
    587553        ensure_menu_bar_widget();
    588         gMenuBarItemWidget = gtk_menu_item_new();
    589         gtk_menu_shell_append(GTK_MENU_SHELL(gMenuBarWidget),
    590                               gMenuBarItemWidget);
    591         gtk_widget_realize(gMenuBarItemWidget);
    592         g_object_set_data(G_OBJECT(gMenuBarItemWidget),
     554        gParts->menuBarItemWidget = gtk_menu_item_new();
     555        gtk_menu_shell_append(GTK_MENU_SHELL(gParts->menuBarWidget),
     556                              gParts->menuBarItemWidget);
     557        gtk_widget_realize(gParts->menuBarItemWidget);
     558        g_object_set_data(G_OBJECT(gParts->menuBarItemWidget),
    593559                          "transparent-bg-hint", GINT_TO_POINTER(TRUE));
    594560    }
     
    599565ensure_menu_popup_widget()
    600566{
    601     if (!gMenuPopupWidget) {
     567    if (!gParts->menuPopupWidget) {
    602568        ensure_menu_bar_item_widget();
    603         gMenuPopupWidget = gtk_menu_new();
    604         gtk_menu_item_set_submenu(GTK_MENU_ITEM(gMenuBarItemWidget),
    605                                   gMenuPopupWidget);
    606         gtk_widget_realize(gMenuPopupWidget);
    607         g_object_set_data(G_OBJECT(gMenuPopupWidget),
     569        gParts->menuPopupWidget = gtk_menu_new();
     570        gtk_menu_item_set_submenu(GTK_MENU_ITEM(gParts->menuBarItemWidget),
     571                                  gParts->menuPopupWidget);
     572        gtk_widget_realize(gParts->menuPopupWidget);
     573        g_object_set_data(G_OBJECT(gParts->menuPopupWidget),
    608574                          "transparent-bg-hint", GINT_TO_POINTER(TRUE));
    609575    }
     
    614580ensure_menu_item_widget()
    615581{
    616     if (!gMenuItemWidget) {
     582    if (!gParts->menuItemWidget) {
    617583        ensure_menu_popup_widget();
    618         gMenuItemWidget = gtk_menu_item_new_with_label("M");
    619         gtk_menu_shell_append(GTK_MENU_SHELL(gMenuPopupWidget),
    620                               gMenuItemWidget);
    621         gtk_widget_realize(gMenuItemWidget);
    622         g_object_set_data(G_OBJECT(gMenuItemWidget),
     584        gParts->menuItemWidget = gtk_menu_item_new_with_label("M");
     585        gtk_menu_shell_append(GTK_MENU_SHELL(gParts->menuPopupWidget),
     586                              gParts->menuItemWidget);
     587        gtk_widget_realize(gParts->menuItemWidget);
     588        g_object_set_data(G_OBJECT(gParts->menuItemWidget),
    623589                          "transparent-bg-hint", GINT_TO_POINTER(TRUE));
    624590    }
     
    629595ensure_image_menu_item_widget()
    630596{
    631     if (!gImageMenuItemWidget) {
     597    if (!gParts->imageMenuItemWidget) {
    632598        ensure_menu_popup_widget();
    633         gImageMenuItemWidget = gtk_image_menu_item_new();
    634         gtk_menu_shell_append(GTK_MENU_SHELL(gMenuPopupWidget),
    635                               gImageMenuItemWidget);
    636         gtk_widget_realize(gImageMenuItemWidget);
    637         g_object_set_data(G_OBJECT(gImageMenuItemWidget),
     599        gParts->imageMenuItemWidget = gtk_image_menu_item_new();
     600        gtk_menu_shell_append(GTK_MENU_SHELL(gParts->menuPopupWidget),
     601                              gParts->imageMenuItemWidget);
     602        gtk_widget_realize(gParts->imageMenuItemWidget);
     603        g_object_set_data(G_OBJECT(gParts->imageMenuItemWidget),
    638604                          "transparent-bg-hint", GINT_TO_POINTER(TRUE));
    639605    }
     
    644610ensure_menu_separator_widget()
    645611{
    646     if (!gMenuSeparatorWidget) {
     612    if (!gParts->menuSeparatorWidget) {
    647613        ensure_menu_popup_widget();
    648         gMenuSeparatorWidget = gtk_separator_menu_item_new();
    649         gtk_menu_shell_append(GTK_MENU_SHELL(gMenuPopupWidget),
    650                               gMenuSeparatorWidget);
    651         gtk_widget_realize(gMenuSeparatorWidget);
    652         g_object_set_data(G_OBJECT(gMenuSeparatorWidget),
     614        gParts->menuSeparatorWidget = gtk_separator_menu_item_new();
     615        gtk_menu_shell_append(GTK_MENU_SHELL(gParts->menuPopupWidget),
     616                              gParts->menuSeparatorWidget);
     617        gtk_widget_realize(gParts->menuSeparatorWidget);
     618        g_object_set_data(G_OBJECT(gParts->menuSeparatorWidget),
    653619                          "transparent-bg-hint", GINT_TO_POINTER(TRUE));
    654620    }
     
    659625ensure_check_menu_item_widget()
    660626{
    661     if (!gCheckMenuItemWidget) {
     627    if (!gParts->checkMenuItemWidget) {
    662628        ensure_menu_popup_widget();
    663         gCheckMenuItemWidget = gtk_check_menu_item_new_with_label("M");
    664         gtk_menu_shell_append(GTK_MENU_SHELL(gMenuPopupWidget),
    665                               gCheckMenuItemWidget);
    666         gtk_widget_realize(gCheckMenuItemWidget);
    667         g_object_set_data(G_OBJECT(gCheckMenuItemWidget),
     629        gParts->checkMenuItemWidget = gtk_check_menu_item_new_with_label("M");
     630        gtk_menu_shell_append(GTK_MENU_SHELL(gParts->menuPopupWidget),
     631                              gParts->checkMenuItemWidget);
     632        gtk_widget_realize(gParts->checkMenuItemWidget);
     633        g_object_set_data(G_OBJECT(gParts->checkMenuItemWidget),
    668634                          "transparent-bg-hint", GINT_TO_POINTER(TRUE));
    669635    }
     
    674640ensure_tree_view_widget()
    675641{
    676     if (!gTreeViewWidget) {
    677         gTreeViewWidget = gtk_tree_view_new();
    678         setup_widget_prototype(gTreeViewWidget);
     642    if (!gParts->treeViewWidget) {
     643        gParts->treeViewWidget = gtk_tree_view_new();
     644        setup_widget_prototype(gParts->treeViewWidget);
    679645    }
    680646    return MOZ_GTK_SUCCESS;
     
    684650ensure_tree_header_cell_widget()
    685651{
    686     if(!gTreeHeaderCellWidget) {
     652    if(!gParts->treeHeaderCellWidget) {
    687653        /*
    688654         * Some GTK engines paint the first and last cell
     
    706672        firstTreeViewColumn = gtk_tree_view_column_new();
    707673        gtk_tree_view_column_set_title(firstTreeViewColumn, "M");
    708         gtk_tree_view_append_column(GTK_TREE_VIEW(gTreeViewWidget), firstTreeViewColumn);
    709 
    710         gMiddleTreeViewColumn = gtk_tree_view_column_new();
    711         gtk_tree_view_column_set_title(gMiddleTreeViewColumn, "M");
    712         gtk_tree_view_append_column(GTK_TREE_VIEW(gTreeViewWidget),
    713                                     gMiddleTreeViewColumn);
     674        gtk_tree_view_append_column(GTK_TREE_VIEW(gParts->treeViewWidget), firstTreeViewColumn);
     675
     676        gParts->middleTreeViewColumn = gtk_tree_view_column_new();
     677        gtk_tree_view_column_set_title(gParts->middleTreeViewColumn, "M");
     678        gtk_tree_view_append_column(GTK_TREE_VIEW(gParts->treeViewWidget),
     679                                    gParts->middleTreeViewColumn);
    714680
    715681        lastTreeViewColumn = gtk_tree_view_column_new();
    716682        gtk_tree_view_column_set_title(lastTreeViewColumn, "M");
    717         gtk_tree_view_append_column(GTK_TREE_VIEW(gTreeViewWidget), lastTreeViewColumn);
     683        gtk_tree_view_append_column(GTK_TREE_VIEW(gParts->treeViewWidget), lastTreeViewColumn);
    718684
    719685        /* Use the middle column's header for our button */
    720         gTreeHeaderCellWidget = gMiddleTreeViewColumn->button;
    721         gTreeHeaderSortArrowWidget = gMiddleTreeViewColumn->arrow;
    722         g_object_set_data(G_OBJECT(gTreeHeaderCellWidget),
     686        gParts->treeHeaderCellWidget = gParts->middleTreeViewColumn->button;
     687        gParts->treeHeaderSortArrowWidget = gParts->middleTreeViewColumn->arrow;
     688        g_object_set_data(G_OBJECT(gParts->treeHeaderCellWidget),
    723689                          "transparent-bg-hint", GINT_TO_POINTER(TRUE));
    724         g_object_set_data(G_OBJECT(gTreeHeaderSortArrowWidget),
     690        g_object_set_data(G_OBJECT(gParts->treeHeaderSortArrowWidget),
    725691                          "transparent-bg-hint", GINT_TO_POINTER(TRUE));
    726692    }
     
    731697ensure_expander_widget()
    732698{
    733     if (!gExpanderWidget) {
    734         gExpanderWidget = gtk_expander_new("M");
    735         setup_widget_prototype(gExpanderWidget);
     699    if (!gParts->expanderWidget) {
     700        gParts->expanderWidget = gtk_expander_new("M");
     701        setup_widget_prototype(gParts->expanderWidget);
    736702    }
    737703    return MOZ_GTK_SUCCESS;
     
    741707ensure_scrolled_window_widget()
    742708{
    743     if (!gScrolledWindowWidget) {
    744         gScrolledWindowWidget = gtk_scrolled_window_new(NULL, NULL);
    745         setup_widget_prototype(gScrolledWindowWidget);
     709    if (!gParts->scrolledWindowWidget) {
     710        gParts->scrolledWindowWidget = gtk_scrolled_window_new(NULL, NULL);
     711        setup_widget_prototype(gParts->scrolledWindowWidget);
    746712    }
    747713    return MOZ_GTK_SUCCESS;
     
    898864    ensure_checkbox_widget();
    899865
    900     gtk_widget_style_get (gCheckboxWidget,
     866    gtk_widget_style_get (gParts->checkboxWidget,
    901867                          "indicator_size", indicator_size,
    902868                          "indicator_spacing", indicator_spacing,
     
    911877    ensure_radiobutton_widget();
    912878
    913     gtk_widget_style_get (gRadiobuttonWidget,
     879    gtk_widget_style_get (gParts->radiobuttonWidget,
    914880                          "indicator_size", indicator_size,
    915881                          "indicator_spacing", indicator_spacing,
     
    937903    if (orientation == GTK_ORIENTATION_HORIZONTAL) {
    938904        ensure_hpaned_widget();
    939         gtk_widget_style_get(gHPanedWidget, "handle_size", size, NULL);
     905        gtk_widget_style_get(gParts->hpanedWidget, "handle_size", size, NULL);
    940906    } else {
    941907        ensure_vpaned_widget();
    942         gtk_widget_style_get(gVPanedWidget, "handle_size", size, NULL);
     908        gtk_widget_style_get(gParts->vpanedWidget, "handle_size", size, NULL);
    943909    }
    944910    return MOZ_GTK_SUCCESS;
     
    979945    if (isradio) {
    980946        moz_gtk_radio_get_metrics(&indicator_size, &indicator_spacing);
    981         w = gRadiobuttonWidget;
     947        w = gParts->radiobuttonWidget;
    982948    } else {
    983949        moz_gtk_checkbox_get_metrics(&indicator_size, &indicator_spacing);
    984         w = gCheckboxWidget;
     950        w = gParts->checkboxWidget;
    985951    }
    986952
     
    1014980    if (isradio) {
    1015981        gtk_paint_option(style, drawable, state_type, shadow_type, cliprect,
    1016                          gRadiobuttonWidget, "radiobutton", x, y,
     982                         gParts->radiobuttonWidget, "radiobutton", x, y,
    1017983                         width, height);
    1018984        if (state->focused) {
    1019985            gtk_paint_focus(style, drawable, GTK_STATE_ACTIVE, cliprect,
    1020                             gRadiobuttonWidget, "radiobutton", focus_x, focus_y,
     986                            gParts->radiobuttonWidget, "radiobutton", focus_x, focus_y,
    1021987                            focus_width, focus_height);
    1022988        }
     
    1028994        */
    1029995        if (inconsistent) {
    1030             gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON(gCheckboxWidget), TRUE);
     996            gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON(gParts->checkboxWidget), TRUE);
    1031997            shadow_type = GTK_SHADOW_ETCHED_IN;
    1032998        } else {
    1033             gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON(gCheckboxWidget), FALSE);
     999            gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON(gParts->checkboxWidget), FALSE);
    10341000        }
    10351001
    10361002        gtk_paint_check(style, drawable, state_type, shadow_type, cliprect,
    1037                         gCheckboxWidget, "checkbutton", x, y, width, height);
     1003                        gParts->checkboxWidget, "checkbutton", x, y, width, height);
    10381004        if (state->focused) {
    10391005            gtk_paint_focus(style, drawable, GTK_STATE_ACTIVE, cliprect,
    1040                             gCheckboxWidget, "checkbutton", focus_x, focus_y,
     1006                            gParts->checkboxWidget, "checkbutton", focus_x, focus_y,
    10411007                            focus_width, focus_height);
    10421008        }
     
    11301096
    11311097    if (flags & MOZ_GTK_STEPPER_VERTICAL)
    1132         scrollbar = gVertScrollbarWidget;
     1098        scrollbar = gParts->vertScrollbarWidget;
    11331099    else
    1134         scrollbar = gHorizScrollbarWidget;
     1100        scrollbar = gParts->horizScrollbarWidget;
    11351101
    11361102    gtk_widget_set_direction(scrollbar, direction);
     
    12161182
    12171183    if (widget ==  MOZ_GTK_SCROLLBAR_TRACK_HORIZONTAL)
    1218         scrollbar = GTK_SCROLLBAR(gHorizScrollbarWidget);
     1184        scrollbar = GTK_SCROLLBAR(gParts->horizScrollbarWidget);
    12191185    else
    1220         scrollbar = GTK_SCROLLBAR(gVertScrollbarWidget);
     1186        scrollbar = GTK_SCROLLBAR(gParts->vertScrollbarWidget);
    12211187
    12221188    gtk_widget_set_direction(GTK_WIDGET(scrollbar), direction);
     
    12591225
    12601226    if (widget == MOZ_GTK_SCROLLBAR_THUMB_HORIZONTAL)
    1261         scrollbar = GTK_SCROLLBAR(gHorizScrollbarWidget);
     1227        scrollbar = GTK_SCROLLBAR(gParts->horizScrollbarWidget);
    12621228    else
    1263         scrollbar = GTK_SCROLLBAR(gVertScrollbarWidget);
     1229        scrollbar = GTK_SCROLLBAR(gParts->vertScrollbarWidget);
    12641230
    12651231    gtk_widget_set_direction(GTK_WIDGET(scrollbar), direction);
     
    13221288
    13231289    ensure_spin_widget();
    1324     gtk_widget_set_direction(gSpinWidget, direction);
    1325     style = gSpinWidget->style;
     1290    gtk_widget_set_direction(gParts->spinWidget, direction);
     1291    style = gParts->spinWidget->style;
    13261292
    13271293    TSOffsetStyleGCs(style, rect->x, rect->y);
    13281294    gtk_paint_box(style, drawable, GTK_STATE_NORMAL, GTK_SHADOW_IN, NULL,
    1329                   gSpinWidget, "spinbutton",
     1295                  gParts->spinWidget, "spinbutton",
    13301296                  rect->x, rect->y, rect->width, rect->height);
    13311297    return MOZ_GTK_SUCCESS;
     
    13441310
    13451311    ensure_spin_widget();
    1346     style = gSpinWidget->style;
    1347     gtk_widget_set_direction(gSpinWidget, direction);
     1312    style = gParts->spinWidget->style;
     1313    gtk_widget_set_direction(gParts->spinWidget, direction);
    13481314
    13491315    TSOffsetStyleGCs(style, rect->x, rect->y);
    1350     gtk_paint_box(style, drawable, state_type, shadow_type, NULL, gSpinWidget,
     1316    gtk_paint_box(style, drawable, state_type, shadow_type, NULL, gParts->spinWidget,
    13511317                  isDown ? "spinbutton_down" : "spinbutton_up",
    13521318                  rect->x, rect->y, rect->width, rect->height);
     
    13601326
    13611327    gtk_paint_arrow(style, drawable, state_type, shadow_type, NULL,
    1362                     gSpinWidget, "spinbutton",
     1328                    gParts->spinWidget, "spinbutton",
    13631329                    isDown ? GTK_ARROW_DOWN : GTK_ARROW_UP, TRUE,
    13641330                    arrow_rect.x, arrow_rect.y,
     
    13791345
    13801346  ensure_scale_widget();
    1381   widget = ((flags == GTK_ORIENTATION_HORIZONTAL) ? gHScaleWidget : gVScaleWidget);
     1347  widget = ((flags == GTK_ORIENTATION_HORIZONTAL) ? gParts->hScaleWidget : gParts->vScaleWidget);
    13821348  gtk_widget_set_direction(widget, direction);
    13831349
     
    14201386
    14211387  ensure_scale_widget();
    1422   widget = ((flags == GTK_ORIENTATION_HORIZONTAL) ? gHScaleWidget : gVScaleWidget);
     1388  widget = ((flags == GTK_ORIENTATION_HORIZONTAL) ? gParts->hScaleWidget : gParts->vScaleWidget);
    14231389  gtk_widget_set_direction(widget, direction);
    14241390
     
    14551421
    14561422    ensure_handlebox_widget();
    1457     gtk_widget_set_direction(gHandleBoxWidget, direction);
    1458 
    1459     style = gHandleBoxWidget->style;
    1460     shadow_type = GTK_HANDLE_BOX(gHandleBoxWidget)->shadow_type;
     1423    gtk_widget_set_direction(gParts->handleBoxWidget, direction);
     1424
     1425    style = gParts->handleBoxWidget->style;
     1426    shadow_type = GTK_HANDLE_BOX(gParts->handleBoxWidget)->shadow_type;
    14611427
    14621428    TSOffsetStyleGCs(style, rect->x, rect->y);
    14631429    gtk_paint_box(style, drawable, state_type, shadow_type, cliprect,
    1464                   gHandleBoxWidget, "handlebox_bin", rect->x, rect->y,
     1430                  gParts->handleBoxWidget, "handlebox_bin", rect->x, rect->y,
    14651431                  rect->width, rect->height);
    14661432
     
    14751441
    14761442    ensure_hpaned_widget();
    1477     gtk_paint_handle(gHPanedWidget->style, drawable, hpaned_state,
    1478                      GTK_SHADOW_NONE, cliprect, gHPanedWidget, "paned",
     1443    gtk_paint_handle(gParts->hpanedWidget->style, drawable, hpaned_state,
     1444                     GTK_SHADOW_NONE, cliprect, gParts->hpanedWidget, "paned",
    14791445                     rect->x, rect->y, rect->width, rect->height,
    14801446                     GTK_ORIENTATION_VERTICAL);
     
    14901456
    14911457    ensure_vpaned_widget();
    1492     gtk_paint_handle(gVPanedWidget->style, drawable, vpaned_state,
    1493                      GTK_SHADOW_NONE, cliprect, gVPanedWidget, "paned",
     1458    gtk_paint_handle(gParts->vpanedWidget->style, drawable, vpaned_state,
     1459                     GTK_SHADOW_NONE, cliprect, gParts->vpanedWidget, "paned",
    14941460                     rect->x, rect->y, rect->width, rect->height,
    14951461                     GTK_ORIENTATION_HORIZONTAL);
     
    15091475
    15101476    ensure_entry_widget();
    1511     gtk_draw_insertion_cursor(gEntryWidget, drawable, cliprect,
     1477    gtk_draw_insertion_cursor(gParts->entryWidget, drawable, cliprect,
    15121478                              &location, TRUE, direction, FALSE);
    15131479
     
    16291595    ensure_scrolled_window_widget();
    16301596
    1631     gtk_widget_set_direction(gTreeViewWidget, direction);
    1632     gtk_widget_set_direction(gScrolledWindowWidget, direction);
     1597    gtk_widget_set_direction(gParts->treeViewWidget, direction);
     1598    gtk_widget_set_direction(gParts->scrolledWindowWidget, direction);
    16331599
    16341600    /* only handle disabled and normal states, otherwise the whole background
     
    16391605     * which contains the cells to the treeview base color.
    16401606     * If we don't set it here the background color will not be correct.*/
    1641     gtk_widget_modify_bg(gTreeViewWidget, state_type,
    1642                          &gTreeViewWidget->style->base[state_type]);
    1643 
    1644     style = gScrolledWindowWidget->style;
     1607    gtk_widget_modify_bg(gParts->treeViewWidget, state_type,
     1608                         &gParts->treeViewWidget->style->base[state_type]);
     1609
     1610    style = gParts->scrolledWindowWidget->style;
    16451611    xthickness = XTHICKNESS(style);
    16461612    ythickness = YTHICKNESS(style);
    16471613
    1648     TSOffsetStyleGCs(gTreeViewWidget->style, rect->x, rect->y);
     1614    TSOffsetStyleGCs(gParts->treeViewWidget->style, rect->x, rect->y);
    16491615    TSOffsetStyleGCs(style, rect->x, rect->y);
    16501616
    1651     gtk_paint_flat_box(gTreeViewWidget->style, drawable, state_type,
    1652                        GTK_SHADOW_NONE, cliprect, gTreeViewWidget, "treeview",
     1617    gtk_paint_flat_box(gParts->treeViewWidget->style, drawable, state_type,
     1618                       GTK_SHADOW_NONE, cliprect, gParts->treeViewWidget, "treeview",
    16531619                       rect->x + xthickness, rect->y + ythickness,
    16541620                       rect->width - 2 * xthickness,
     
    16561622
    16571623    gtk_paint_shadow(style, drawable, GTK_STATE_NORMAL, GTK_SHADOW_IN,
    1658                      cliprect, gScrolledWindowWidget, "scrolled_window",
     1624                     cliprect, gParts->scrolledWindowWidget, "scrolled_window",
    16591625                     rect->x, rect->y, rect->width, rect->height);
    16601626
     
    16671633                               gboolean isSorted, GtkTextDirection direction)
    16681634{
    1669     gtk_tree_view_column_set_sort_indicator(gMiddleTreeViewColumn,
     1635    gtk_tree_view_column_set_sort_indicator(gParts->middleTreeViewColumn,
    16701636                                            isSorted);
    16711637
    16721638    moz_gtk_button_paint(drawable, rect, cliprect, state, GTK_RELIEF_NORMAL,
    1673                          gTreeHeaderCellWidget, direction);
     1639                         gParts->treeHeaderCellWidget, direction);
    16741640    return MOZ_GTK_SUCCESS;
    16751641}
     
    16881654
    16891655    ensure_tree_header_cell_widget();
    1690     gtk_widget_set_direction(gTreeHeaderSortArrowWidget, direction);
     1656    gtk_widget_set_direction(gParts->treeHeaderSortArrowWidget, direction);
    16911657
    16921658    /* hard code these values */
     
    16961662    arrow_rect.y = rect->y + (rect->height - arrow_rect.height) / 2;
    16971663
    1698     style = gTreeHeaderSortArrowWidget->style;
     1664    style = gParts->treeHeaderSortArrowWidget->style;
    16991665    TSOffsetStyleGCs(style, arrow_rect.x, arrow_rect.y);
    17001666
    17011667    gtk_paint_arrow(style, drawable, state_type, shadow_type, cliprect,
    1702                     gTreeHeaderSortArrowWidget, "arrow",  arrow_type, TRUE,
     1668                    gParts->treeHeaderSortArrowWidget, "arrow",  arrow_type, TRUE,
    17031669                    arrow_rect.x, arrow_rect.y,
    17041670                    arrow_rect.width, arrow_rect.height);
     
    17171683
    17181684    ensure_tree_view_widget();
    1719     gtk_widget_set_direction(gTreeViewWidget, direction);
    1720 
    1721     style = gTreeViewWidget->style;
     1685    gtk_widget_set_direction(gParts->treeViewWidget, direction);
     1686
     1687    style = gParts->treeViewWidget->style;
    17221688
    17231689    /* Because the frame we get is of the entire treeview, we can't get the precise
     
    17261692
    17271693    TSOffsetStyleGCs(style, rect->x, rect->y);
    1728     gtk_paint_expander(style, drawable, state_type, cliprect, gTreeViewWidget, "treeview",
     1694    gtk_paint_expander(style, drawable, state_type, cliprect, gParts->treeViewWidget, "treeview",
    17291695                       rect->x + rect->width / 2, rect->y + rect->height / 2, expander_state);
    17301696
     
    17421708
    17431709    ensure_expander_widget();
    1744     gtk_widget_set_direction(gExpanderWidget, direction);
    1745 
    1746     style = gExpanderWidget->style;
     1710    gtk_widget_set_direction(gParts->expanderWidget, direction);
     1711
     1712    style = gParts->expanderWidget->style;
    17471713
    17481714    TSOffsetStyleGCs(style, rect->x, rect->y);
    1749     gtk_paint_expander(style, drawable, state_type, cliprect, gExpanderWidget, "expander",
     1715    gtk_paint_expander(style, drawable, state_type, cliprect, gParts->expanderWidget, "expander",
    17501716                       rect->x + rect->width / 2, rect->y + rect->height / 2, expander_state);
    17511717
     
    17591725{
    17601726    GdkRectangle arrow_rect, real_arrow_rect;
    1761     gint arrow_size, separator_width;
     1727    gint /* arrow_size, */ separator_width;
    17621728    gboolean wide_separators;
    17631729    GtkStateType state_type = ConvertGtkState(state);
     
    17681734    ensure_combo_box_widgets();
    17691735
    1770     /* Also sets the direction on gComboBoxButtonWidget, which is then
     1736    /* Also sets the direction on gParts->comboBoxButtonWidget, which is then
    17711737     * inherited by the separator and arrow */
    17721738    moz_gtk_button_paint(drawable, rect, cliprect, state, GTK_RELIEF_NORMAL,
    1773                          gComboBoxButtonWidget, direction);
    1774 
    1775     calculate_button_inner_rect(gComboBoxButtonWidget,
     1739                         gParts->comboBoxButtonWidget, direction);
     1740
     1741    calculate_button_inner_rect(gParts->comboBoxButtonWidget,
    17761742                                rect, &arrow_rect, direction, ishtml);
    17771743    /* Now arrow_rect contains the inner rect ; we want to correct the width
    17781744     * to what the arrow needs (see gtk_combo_box_size_allocate) */
    1779     gtk_widget_size_request(gComboBoxArrowWidget, &arrow_req);
     1745    gtk_widget_size_request(gParts->comboBoxArrowWidget, &arrow_req);
    17801746    if (direction == GTK_TEXT_DIR_LTR)
    17811747        arrow_rect.x += arrow_rect.width - arrow_req.width;
    17821748    arrow_rect.width = arrow_req.width;
    17831749
    1784     calculate_arrow_rect(gComboBoxArrowWidget,
     1750    calculate_arrow_rect(gParts->comboBoxArrowWidget,
    17851751                         &arrow_rect, &real_arrow_rect, direction);
    17861752
    1787     style = gComboBoxArrowWidget->style;
     1753    style = gParts->comboBoxArrowWidget->style;
    17881754    TSOffsetStyleGCs(style, rect->x, rect->y);
    17891755
    1790     gtk_widget_size_allocate(gComboBoxWidget, rect);
     1756    gtk_widget_size_allocate(gParts->comboBoxWidget, rect);
    17911757
    17921758    gtk_paint_arrow(style, drawable, state_type, shadow_type, cliprect,
    1793                     gComboBoxArrowWidget, "arrow",  GTK_ARROW_DOWN, TRUE,
     1759                    gParts->comboBoxArrowWidget, "arrow",  GTK_ARROW_DOWN, TRUE,
    17941760                    real_arrow_rect.x, real_arrow_rect.y,
    17951761                    real_arrow_rect.width, real_arrow_rect.height);
     
    17971763
    17981764    /* If there is no separator in the theme, there's nothing left to do. */
    1799     if (!gComboBoxSeparatorWidget)
     1765    if (!gParts->comboBoxSeparatorWidget)
    18001766        return MOZ_GTK_SUCCESS;
    18011767
    1802     style = gComboBoxSeparatorWidget->style;
     1768    style = gParts->comboBoxSeparatorWidget->style;
    18031769    TSOffsetStyleGCs(style, rect->x, rect->y);
    18041770
    1805     gtk_widget_style_get(gComboBoxSeparatorWidget,
     1771    gtk_widget_style_get(gParts->comboBoxSeparatorWidget,
    18061772                         "wide-separators", &wide_separators,
    18071773                         "separator-width", &separator_width,
     
    18161782        gtk_paint_box(style, drawable,
    18171783                      GTK_STATE_NORMAL, GTK_SHADOW_ETCHED_OUT,
    1818                       cliprect, gComboBoxSeparatorWidget, "vseparator",
     1784                      cliprect, gParts->comboBoxSeparatorWidget, "vseparator",
    18191785                      arrow_rect.x, arrow_rect.y,
    18201786                      separator_width, arrow_rect.height);
     
    18261792
    18271793        gtk_paint_vline(style, drawable, GTK_STATE_NORMAL, cliprect,
    1828                         gComboBoxSeparatorWidget, "vseparator",
     1794                        gParts->comboBoxSeparatorWidget, "vseparator",
    18291795                        arrow_rect.y, arrow_rect.y + arrow_rect.height,
    18301796                        arrow_rect.x);
     
    18441810
    18451811    ensure_button_arrow_widget();
    1846     style = gButtonArrowWidget->style;
    1847 
    1848     calculate_arrow_rect(gButtonArrowWidget, rect, &arrow_rect,
     1812    style = gParts->buttonArrowWidget->style;
     1813
     1814    calculate_arrow_rect(gParts->buttonArrowWidget, rect, &arrow_rect,
    18491815                         GTK_TEXT_DIR_LTR);
    18501816
    18511817    TSOffsetStyleGCs(style, arrow_rect.x, arrow_rect.y);
    18521818    gtk_paint_arrow(style, drawable, state_type, shadow_type, cliprect,
    1853                     gButtonArrowWidget, "arrow",  GTK_ARROW_DOWN, TRUE,
     1819                    gParts->buttonArrowWidget, "arrow",  GTK_ARROW_DOWN, TRUE,
    18541820                    arrow_rect.x, arrow_rect.y, arrow_rect.width, arrow_rect.height);
    18551821
     
    18751841        /* Some themes draw a complementary focus ring for the dropdown button
    18761842         * when the dropdown entry has focus */
    1877         GTK_WIDGET_SET_FLAGS(gComboBoxEntryTextareaWidget, GTK_HAS_FOCUS);
     1843        GTK_WIDGET_SET_FLAGS(gParts->comboBoxEntryTextareaWidget, GTK_HAS_FOCUS);
    18781844    }
    18791845
    18801846    moz_gtk_button_paint(drawable, rect, cliprect, state, GTK_RELIEF_NORMAL,
    1881                          gComboBoxEntryButtonWidget, direction);
     1847                         gParts->comboBoxEntryButtonWidget, direction);
    18821848
    18831849    if (input_focus)
    1884         GTK_WIDGET_UNSET_FLAGS(gComboBoxEntryTextareaWidget, GTK_HAS_FOCUS);
    1885 
    1886     calculate_button_inner_rect(gComboBoxEntryButtonWidget,
     1850        GTK_WIDGET_UNSET_FLAGS(gParts->comboBoxEntryTextareaWidget, GTK_HAS_FOCUS);
     1851
     1852    calculate_button_inner_rect(gParts->comboBoxEntryButtonWidget,
    18871853                                rect, &arrow_rect, direction, FALSE);
    18881854    if (state_type == GTK_STATE_ACTIVE) {
    1889         gtk_widget_style_get(gComboBoxEntryButtonWidget,
     1855        gtk_widget_style_get(gParts->comboBoxEntryButtonWidget,
    18901856                             "child-displacement-x", &x_displacement,
    18911857                             "child-displacement-y", &y_displacement,
     
    18951861    }
    18961862
    1897     calculate_arrow_rect(gComboBoxEntryArrowWidget,
     1863    calculate_arrow_rect(gParts->comboBoxEntryArrowWidget,
    18981864                         &arrow_rect, &real_arrow_rect, direction);
    18991865
    1900     style = gComboBoxEntryArrowWidget->style;
     1866    style = gParts->comboBoxEntryArrowWidget->style;
    19011867    TSOffsetStyleGCs(style, real_arrow_rect.x, real_arrow_rect.y);
    19021868
    19031869    gtk_paint_arrow(style, drawable, state_type, shadow_type, cliprect,
    1904                     gComboBoxEntryArrowWidget, "arrow",  GTK_ARROW_DOWN, TRUE,
     1870                    gParts->comboBoxEntryArrowWidget, "arrow",  GTK_ARROW_DOWN, TRUE,
    19051871                    real_arrow_rect.x, real_arrow_rect.y,
    19061872                    real_arrow_rect.width, real_arrow_rect.height);
     
    19221888    if (isradio) {
    19231889        ensure_radiobutton_widget();
    1924         widget = gRadiobuttonWidget;
     1890        widget = gParts->radiobuttonWidget;
    19251891    } else {
    19261892        ensure_checkbox_widget();
    1927         widget = gCheckboxWidget;
     1893        widget = gParts->checkboxWidget;
    19281894    }
    19291895    gtk_widget_set_direction(widget, direction);
     
    19731939    if (isradio) {
    19741940        ensure_radiobutton_widget();
    1975         widget = gRadiobuttonWidget;
     1941        widget = gParts->radiobuttonWidget;
    19761942    } else {
    19771943        ensure_checkbox_widget();
    1978         widget = gCheckboxWidget;
     1944        widget = gParts->checkboxWidget;
    19791945    }
    19801946    gtk_widget_set_direction(widget, direction);
     
    20051971
    20061972    ensure_toolbar_widget();
    2007     gtk_widget_set_direction(gToolbarWidget, direction);
    2008 
    2009     style = gToolbarWidget->style;
     1973    gtk_widget_set_direction(gParts->toolbarWidget, direction);
     1974
     1975    style = gParts->toolbarWidget->style;
    20101976
    20111977    TSOffsetStyleGCs(style, rect->x, rect->y);
     
    20161982                                       rect->width, rect->height);
    20171983
    2018     gtk_widget_style_get(gToolbarWidget, "shadow-type", &shadow_type, NULL);
     1984    gtk_widget_style_get(gParts->toolbarWidget, "shadow-type", &shadow_type, NULL);
    20191985
    20201986    gtk_paint_box (style, drawable, GTK_STATE_NORMAL, shadow_type,
    2021                    cliprect, gToolbarWidget, "toolbar",
     1987                   cliprect, gParts->toolbarWidget, "toolbar",
    20221988                   rect->x, rect->y, rect->width, rect->height);
    20231989
     
    20402006
    20412007    ensure_toolbar_separator_widget();
    2042     gtk_widget_set_direction(gToolbarSeparatorWidget, direction);
    2043 
    2044     style = gToolbarSeparatorWidget->style;
    2045 
    2046     gtk_widget_style_get(gToolbarWidget,
     2008    gtk_widget_set_direction(gParts->toolbarSeparatorWidget, direction);
     2009
     2010    style = gParts->toolbarSeparatorWidget->style;
     2011
     2012    gtk_widget_style_get(gParts->toolbarWidget,
    20472013                         "wide-separators", &wide_separators,
    20482014                         "separator-width", &separator_width,
     
    20572023        gtk_paint_box(style, drawable,
    20582024                      GTK_STATE_NORMAL, GTK_SHADOW_ETCHED_OUT,
    2059                       cliprect, gToolbarWidget, "vseparator",
     2025                      cliprect, gParts->toolbarWidget, "vseparator",
    20602026                      rect->x + (rect->width - separator_width) / 2,
    20612027                      rect->y + rect->height * start_fraction,
     
    20702036   
    20712037        gtk_paint_vline(style, drawable,
    2072                         GTK_STATE_NORMAL, cliprect, gToolbarSeparatorWidget,
     2038                        GTK_STATE_NORMAL, cliprect, gParts->toolbarSeparatorWidget,
    20732039                        "toolbar",
    20742040                        rect->y + rect->height * start_fraction,
     
    20872053
    20882054    ensure_tooltip_widget();
    2089     gtk_widget_set_direction(gTooltipWidget, direction);
     2055    gtk_widget_set_direction(gParts->tooltipWidget, direction);
    20902056
    20912057    style = gtk_rc_get_style_by_paths(gtk_settings_get_default(),
     
    20932059                                      GTK_TYPE_WINDOW);
    20942060
    2095     style = gtk_style_attach(style, gTooltipWidget->window);
     2061    style = gtk_style_attach(style, gParts->tooltipWidget->window);
    20962062    TSOffsetStyleGCs(style, rect->x, rect->y);
    20972063    gtk_paint_flat_box(style, drawable, GTK_STATE_NORMAL, GTK_SHADOW_OUT,
    2098                        cliprect, gTooltipWidget, "tooltip",
     2064                       cliprect, gParts->tooltipWidget, "tooltip",
    20992065                       rect->x, rect->y, rect->width, rect->height);
    21002066
     
    21112077
    21122078    ensure_window_widget();
    2113     gtk_widget_set_direction(gProtoWindow, direction);
    2114 
    2115     style = gProtoWindow->style;
     2079    gtk_widget_set_direction(gParts->protoWindow, direction);
     2080
     2081    style = gParts->protoWindow->style;
    21162082
    21172083    TSOffsetStyleGCs(style, rect->x, rect->y);
    21182084
    2119     gtk_paint_resize_grip(style, drawable, state_type, cliprect, gProtoWindow,
     2085    gtk_paint_resize_grip(style, drawable, state_type, cliprect, gParts->protoWindow,
    21202086                          NULL, (direction == GTK_TEXT_DIR_LTR) ?
    21212087                          GDK_WINDOW_EDGE_SOUTH_EAST :
     
    21332099
    21342100    ensure_frame_widget();
    2135     gtk_widget_set_direction(gFrameWidget, direction);
    2136 
    2137     style = gFrameWidget->style;
    2138 
    2139     gtk_widget_style_get(gStatusbarWidget, "shadow-type", &shadow_type, NULL);
     2101    gtk_widget_set_direction(gParts->frameWidget, direction);
     2102
     2103    style = gParts->frameWidget->style;
     2104
     2105    gtk_widget_style_get(gParts->statusbarWidget, "shadow-type", &shadow_type, NULL);
    21402106
    21412107    TSOffsetStyleGCs(style, rect->x, rect->y);
    21422108    gtk_paint_shadow(style, drawable, GTK_STATE_NORMAL, shadow_type,
    2143                      cliprect, gFrameWidget, "frame", rect->x, rect->y,
     2109                     cliprect, gParts->frameWidget, "frame", rect->x, rect->y,
    21442110                     rect->width, rect->height);
    21452111
     
    21542120
    21552121    ensure_progress_widget();
    2156     gtk_widget_set_direction(gProgressWidget, direction);
    2157 
    2158     style = gProgressWidget->style;
     2122    gtk_widget_set_direction(gParts->progresWidget, direction);
     2123
     2124    style = gParts->progresWidget->style;
    21592125
    21602126    TSOffsetStyleGCs(style, rect->x, rect->y);
    21612127    gtk_paint_box(style, drawable, GTK_STATE_NORMAL, GTK_SHADOW_IN,
    2162                   cliprect, gProgressWidget, "trough", rect->x, rect->y,
     2128                  cliprect, gParts->progresWidget, "trough", rect->x, rect->y,
    21632129                  rect->width, rect->height);
    21642130
     
    21732139
    21742140    ensure_progress_widget();
    2175     gtk_widget_set_direction(gProgressWidget, direction);
    2176 
    2177     style = gProgressWidget->style;
     2141    gtk_widget_set_direction(gParts->progresWidget, direction);
     2142
     2143    style = gParts->progresWidget->style;
    21782144
    21792145    TSOffsetStyleGCs(style, rect->x, rect->y);
    21802146    gtk_paint_box(style, drawable, GTK_STATE_PRELIGHT, GTK_SHADOW_OUT,
    2181                   cliprect, gProgressWidget, "bar", rect->x, rect->y,
     2147                  cliprect, gParts->progresWidget, "bar", rect->x, rect->y,
    21822148                  rect->width, rect->height);
    21832149
     
    21892155{
    21902156    ensure_tab_widget();
    2191     if (YTHICKNESS(gTabWidget->style) < 2)
     2157    if (YTHICKNESS(gParts->tabWidget->style) < 2)
    21922158        return 2; /* some themes don't set ythickness correctly */
    21932159
    2194     return YTHICKNESS(gTabWidget->style);
     2160    return YTHICKNESS(gParts->tabWidget->style);
    21952161}
    21962162
     
    22082174
    22092175    ensure_tab_widget();
    2210     gtk_widget_set_direction(gTabWidget, direction);
    2211 
    2212     style = gTabWidget->style;
     2176    gtk_widget_set_direction(gParts->tabWidget, direction);
     2177
     2178    style = gParts->tabWidget->style;
    22132179    TSOffsetStyleGCs(style, rect->x, rect->y);
    22142180
     
    22162182        /* Only draw the tab */
    22172183        gtk_paint_extension(style, drawable, GTK_STATE_ACTIVE, GTK_SHADOW_OUT,
    2218                             cliprect, gTabWidget, "tab",
     2184                            cliprect, gParts->tabWidget, "tab",
    22192185                            rect->x, rect->y, rect->width, rect->height,
    22202186                            (flags & MOZ_GTK_TAB_BOTTOM) ?
     
    22832249            /* Draw the tab */
    22842250            gtk_paint_extension(style, drawable, GTK_STATE_NORMAL,
    2285                                 GTK_SHADOW_OUT, cliprect, gTabWidget, "tab",
     2251                                GTK_SHADOW_OUT, cliprect, gParts->tabWidget, "tab",
    22862252                                rect->x, rect->y + gap_voffset, rect->width,
    22872253                                rect->height - gap_voffset, GTK_POS_TOP);
     
    22962262                                               rect->width, gap_height);
    22972263            gtk_paint_box_gap(style, drawable, GTK_STATE_NORMAL, GTK_SHADOW_OUT,
    2298                               cliprect, gTabWidget, "notebook",
     2264                              cliprect, gParts->tabWidget, "notebook",
    22992265                              rect->x - gap_loffset,
    23002266                              rect->y + gap_voffset - 3 * gap_height,
     
    23082274            /* Draw the tab */
    23092275            gtk_paint_extension(style, drawable, GTK_STATE_NORMAL,
    2310                                 GTK_SHADOW_OUT, cliprect, gTabWidget, "tab",
     2276                                GTK_SHADOW_OUT, cliprect, gParts->tabWidget, "tab",
    23112277                                rect->x, rect->y, rect->width,
    23122278                                rect->height - gap_voffset, GTK_POS_BOTTOM);
     
    23212287                                               rect->width, gap_height);
    23222288            gtk_paint_box_gap(style, drawable, GTK_STATE_NORMAL, GTK_SHADOW_OUT,
    2323                               cliprect, gTabWidget, "notebook",
     2289                              cliprect, gParts->tabWidget, "notebook",
    23242290                              rect->x - gap_loffset,
    23252291                              rect->y + rect->height - gap_voffset,
     
    23452311
    23462312    ensure_tab_widget();
    2347     gtk_widget_set_direction(gTabWidget, direction);
    2348 
    2349     style = gTabWidget->style;
     2313    gtk_widget_set_direction(gParts->tabWidget, direction);
     2314
     2315    style = gParts->tabWidget->style;
    23502316
    23512317    TSOffsetStyleGCs(style, rect->x, rect->y);
    23522318    gtk_paint_box_gap(style, drawable, GTK_STATE_NORMAL, GTK_SHADOW_OUT,
    2353                       cliprect, gTabWidget, "notebook", rect->x, rect->y,
     2319                      cliprect, gParts->tabWidget, "notebook", rect->x, rect->y,
    23542320                      rect->width, rect->height,
    23552321                      GTK_POS_TOP, -10, 0);
     
    23732339    ensure_tab_widget();
    23742340
    2375     style = gTabWidget->style;
     2341    style = gParts->tabWidget->style;
    23762342    TSOffsetStyleGCs(style, rect->x, rect->y);
    23772343
     
    23822348
    23832349    gtk_paint_arrow(style, drawable, state_type, shadow_type, NULL,
    2384                     gTabWidget, "notebook", arrow_type, TRUE,
     2350                    gParts->tabWidget, "notebook", arrow_type, TRUE,
    23852351                    x, y, arrow_size, arrow_size);
    23862352
     
    23952361    GtkShadowType shadow_type;
    23962362    ensure_menu_bar_widget();
    2397     gtk_widget_set_direction(gMenuBarWidget, direction);
    2398 
    2399     gtk_widget_style_get(gMenuBarWidget, "shadow-type", &shadow_type, NULL);
    2400 
    2401     style = gMenuBarWidget->style;
     2363    gtk_widget_set_direction(gParts->menuBarWidget, direction);
     2364
     2365    gtk_widget_style_get(gParts->menuBarWidget, "shadow-type", &shadow_type, NULL);
     2366
     2367    style = gParts->menuBarWidget->style;
    24022368
    24032369    TSOffsetStyleGCs(style, rect->x, rect->y);
     
    24072373
    24082374    gtk_paint_box(style, drawable, GTK_STATE_NORMAL, shadow_type,
    2409                   cliprect, gMenuBarWidget, "menubar", rect->x, rect->y,
     2375                  cliprect, gParts->menuBarWidget, "menubar", rect->x, rect->y,
    24102376                  rect->width, rect->height);
    24112377    return MOZ_GTK_SUCCESS;
     
    24182384    GtkStyle* style;
    24192385    ensure_menu_popup_widget();
    2420     gtk_widget_set_direction(gMenuPopupWidget, direction);
    2421 
    2422     style = gMenuPopupWidget->style;
     2386    gtk_widget_set_direction(gParts->menuPopupWidget, direction);
     2387
     2388    style = gParts->menuPopupWidget->style;
    24232389
    24242390    TSOffsetStyleGCs(style, rect->x, rect->y);
     
    24272393                                       rect->width, rect->height);
    24282394    gtk_paint_box(style, drawable, GTK_STATE_NORMAL, GTK_SHADOW_OUT,
    2429                   cliprect, gMenuPopupWidget, "menu",
     2395                  cliprect, gParts->menuPopupWidget, "menu",
    24302396                  rect->x, rect->y, rect->width, rect->height);
    24312397
     
    24442410
    24452411    ensure_menu_separator_widget();
    2446     gtk_widget_set_direction(gMenuSeparatorWidget, direction);
    2447 
    2448     style = gMenuSeparatorWidget->style;
    2449 
    2450     gtk_widget_style_get(gMenuSeparatorWidget,
     2412    gtk_widget_set_direction(gParts->menuSeparatorWidget, direction);
     2413
     2414    style = gParts->menuSeparatorWidget->style;
     2415
     2416    gtk_widget_style_get(gParts->menuSeparatorWidget,
    24512417                         "wide-separators",    &wide_separators,
    24522418                         "separator-height",   &separator_height,
     
    24622428        gtk_paint_box(style, drawable,
    24632429                      GTK_STATE_NORMAL, GTK_SHADOW_ETCHED_OUT,
    2464                       cliprect, gMenuSeparatorWidget, "hseparator",
     2430                      cliprect, gParts->menuSeparatorWidget, "hseparator",
    24652431                      rect->x + horizontal_padding + style->xthickness,
    24662432                      rect->y + (rect->height - separator_height - style->ythickness) / 2,
     
    24732439
    24742440        gtk_paint_hline(style, drawable,
    2475                         GTK_STATE_NORMAL, cliprect, gMenuSeparatorWidget,
     2441                        GTK_STATE_NORMAL, cliprect, gParts->menuSeparatorWidget,
    24762442                        "menuitem",
    24772443                        rect->x + horizontal_padding + style->xthickness,
     
    24952461        if (flags & MOZ_TOPLEVEL_MENU_ITEM) {
    24962462            ensure_menu_bar_item_widget();
    2497             item_widget = gMenuBarItemWidget;
     2463            item_widget = gParts->menuBarItemWidget;
    24982464        } else {
    24992465            ensure_menu_item_widget();
    2500             item_widget = gMenuItemWidget;
     2466            item_widget = gParts->menuItemWidget;
    25012467        }
    25022468        gtk_widget_set_direction(item_widget, direction);
     
    25252491
    25262492    ensure_menu_item_widget();
    2527     gtk_widget_set_direction(gMenuItemWidget, direction);
    2528 
    2529     style = gMenuItemWidget->style;
     2493    gtk_widget_set_direction(gParts->menuItemWidget, direction);
     2494
     2495    style = gParts->menuItemWidget->style;
    25302496
    25312497    TSOffsetStyleGCs(style, rect->x, rect->y);
    25322498    gtk_paint_arrow(style, drawable, state_type,
    25332499                    (state_type == GTK_STATE_PRELIGHT) ? GTK_SHADOW_IN : GTK_SHADOW_OUT,
    2534                     cliprect, gMenuItemWidget, "menuitem",
     2500                    cliprect, gParts->menuItemWidget, "menuitem",
    25352501                    (direction == GTK_TEXT_DIR_LTR) ? GTK_ARROW_RIGHT : GTK_ARROW_LEFT,
    25362502                    TRUE, rect->x, rect->y, rect->width, rect->height);
     
    25552521
    25562522    ensure_check_menu_item_widget();
    2557     gtk_widget_set_direction(gCheckMenuItemWidget, direction);
    2558 
    2559     gtk_widget_style_get (gCheckMenuItemWidget,
     2523    gtk_widget_set_direction(gParts->checkMenuItemWidget, direction);
     2524
     2525    gtk_widget_style_get (gParts->checkMenuItemWidget,
    25602526                          "indicator-size", &indicator_size,
    25612527                          NULL);
    25622528
    2563     if (checked || GTK_CHECK_MENU_ITEM(gCheckMenuItemWidget)->always_show_toggle) {
    2564       style = gCheckMenuItemWidget->style;
    2565 
    2566       offset = GTK_CONTAINER(gCheckMenuItemWidget)->border_width +
    2567              gCheckMenuItemWidget->style->xthickness + 2;
     2529    if (checked || GTK_CHECK_MENU_ITEM(gParts->checkMenuItemWidget)->always_show_toggle) {
     2530      style = gParts->checkMenuItemWidget->style;
     2531
     2532      offset = GTK_CONTAINER(gParts->checkMenuItemWidget)->border_width +
     2533             gParts->checkMenuItemWidget->style->xthickness + 2;
    25682534
    25692535      /* while normally this "3" would be the horizontal-padding style value, passing it to Gecko
     
    25752541
    25762542      TSOffsetStyleGCs(style, x, y);
    2577       gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gCheckMenuItemWidget),
     2543      gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gParts->checkMenuItemWidget),
    25782544                                     checked);
    25792545
    25802546      if (isradio) {
    25812547        gtk_paint_option(style, drawable, state_type, shadow_type, cliprect,
    2582                          gCheckMenuItemWidget, "option",
     2548                         gParts->checkMenuItemWidget, "option",
    25832549                         x, y, indicator_size, indicator_size);
    25842550      } else {
    25852551        gtk_paint_check(style, drawable, state_type, shadow_type, cliprect,
    2586                         gCheckMenuItemWidget, "check",
     2552                        gParts->checkMenuItemWidget, "check",
    25872553                        x, y, indicator_size, indicator_size);
    25882554      }
     
    25992565
    26002566    ensure_window_widget();
    2601     gtk_widget_set_direction(gProtoWindow, direction);
    2602 
    2603     style = gProtoWindow->style;
     2567    gtk_widget_set_direction(gParts->protoWindow, direction);
     2568
     2569    style = gParts->protoWindow->style;
    26042570
    26052571    TSOffsetStyleGCs(style, rect->x, rect->y);
     
    26262592
    26272593            ensure_button_widget();
    2628             *left = *top = *right = *bottom = GTK_CONTAINER(gButtonWidget)->border_width;
     2594            *left = *top = *right = *bottom = GTK_CONTAINER(gParts->buttonWidget)->border_width;
    26292595
    26302596            /* Don't add this padding in HTML, otherwise the buttons will
    26312597               become too big and stuff the layout. */
    26322598            if (!inhtml) {
    2633                 moz_gtk_widget_get_focus(gButtonWidget, &interior_focus, &focus_width, &focus_pad);
    2634                 moz_gtk_button_get_inner_border(gButtonWidget, &inner_border);
     2599                moz_gtk_widget_get_focus(gParts->buttonWidget, &interior_focus, &focus_width, &focus_pad);
     2600                moz_gtk_button_get_inner_border(gParts->buttonWidget, &inner_border);
    26352601                *left += focus_width + focus_pad + inner_border.left;
    26362602                *right += focus_width + focus_pad + inner_border.right;
     
    26392605            }
    26402606
    2641             *left += gButtonWidget->style->xthickness;
    2642             *right += gButtonWidget->style->xthickness;
    2643             *top += gButtonWidget->style->ythickness;
    2644             *bottom += gButtonWidget->style->ythickness;
     2607            *left += gParts->buttonWidget->style->xthickness;
     2608            *right += gParts->buttonWidget->style->xthickness;
     2609            *top += gParts->buttonWidget->style->ythickness;
     2610            *bottom += gParts->buttonWidget->style->ythickness;
    26452611            return MOZ_GTK_SUCCESS;
    26462612        }
    26472613    case MOZ_GTK_ENTRY:
    26482614        ensure_entry_widget();
    2649         w = gEntryWidget;
     2615        w = gParts->entryWidget;
    26502616        break;
    26512617    case MOZ_GTK_TREEVIEW:
    26522618        ensure_tree_view_widget();
    2653         w = gTreeViewWidget;
     2619        w = gParts->treeViewWidget;
    26542620        break;
    26552621    case MOZ_GTK_TREE_HEADER_CELL:
     
    26662632
    26672633            ensure_tree_header_cell_widget();
    2668             *left = *top = *right = *bottom = GTK_CONTAINER(gTreeHeaderCellWidget)->border_width;
    2669 
    2670             moz_gtk_widget_get_focus(gTreeHeaderCellWidget, &interior_focus, &focus_width, &focus_pad);
    2671             moz_gtk_button_get_inner_border(gTreeHeaderCellWidget, &inner_border);
     2634            *left = *top = *right = *bottom = GTK_CONTAINER(gParts->treeHeaderCellWidget)->border_width;
     2635
     2636            moz_gtk_widget_get_focus(gParts->treeHeaderCellWidget, &interior_focus, &focus_width, &focus_pad);
     2637            moz_gtk_button_get_inner_border(gParts->treeHeaderCellWidget, &inner_border);
    26722638            *left += focus_width + focus_pad + inner_border.left;
    26732639            *right += focus_width + focus_pad + inner_border.right;
     
    26752641            *bottom += focus_width + focus_pad + inner_border.bottom;
    26762642           
    2677             *left += gTreeHeaderCellWidget->style->xthickness;
    2678             *right += gTreeHeaderCellWidget->style->xthickness;
    2679             *top += gTreeHeaderCellWidget->style->ythickness;
    2680             *bottom += gTreeHeaderCellWidget->style->ythickness;
     2643            *left += gParts->treeHeaderCellWidget->style->xthickness;
     2644            *right += gParts->treeHeaderCellWidget->style->xthickness;
     2645            *top += gParts->treeHeaderCellWidget->style->ythickness;
     2646            *bottom += gParts->treeHeaderCellWidget->style->ythickness;
    26812647            return MOZ_GTK_SUCCESS;
    26822648        }
    26832649    case MOZ_GTK_TREE_HEADER_SORTARROW:
    26842650        ensure_tree_header_cell_widget();
    2685         w = gTreeHeaderSortArrowWidget;
     2651        w = gParts->treeHeaderSortArrowWidget;
    26862652        break;
    26872653    case MOZ_GTK_DROPDOWN_ENTRY:
    26882654        ensure_combo_box_entry_widgets();
    2689         w = gComboBoxEntryTextareaWidget;
     2655        w = gParts->comboBoxEntryTextareaWidget;
    26902656        break;
    26912657    case MOZ_GTK_DROPDOWN_ARROW:
    26922658        ensure_combo_box_entry_widgets();
    2693         w = gComboBoxEntryButtonWidget;
     2659        w = gParts->comboBoxEntryButtonWidget;
    26942660        break;
    26952661    case MOZ_GTK_DROPDOWN:
     
    27042670            ensure_combo_box_widgets();
    27052671
    2706             *left = GTK_CONTAINER(gComboBoxButtonWidget)->border_width;
     2672            *left = GTK_CONTAINER(gParts->comboBoxButtonWidget)->border_width;
    27072673
    27082674            if (!inhtml) {
    2709                 moz_gtk_widget_get_focus(gComboBoxButtonWidget,
     2675                moz_gtk_widget_get_focus(gParts->comboBoxButtonWidget,
    27102676                                         &ignored_interior_focus,
    27112677                                         &focus_width, &focus_pad);
     
    27132679            }
    27142680
    2715             *top = *left + gComboBoxButtonWidget->style->ythickness;
    2716             *left += gComboBoxButtonWidget->style->xthickness;
     2681            *top = *left + gParts->comboBoxButtonWidget->style->ythickness;
     2682            *left += gParts->comboBoxButtonWidget->style->xthickness;
    27172683
    27182684            *right = *left; *bottom = *top;
     
    27202686            /* If there is no separator, don't try to count its width. */
    27212687            separator_width = 0;
    2722             if (gComboBoxSeparatorWidget) {
    2723                 gtk_widget_style_get(gComboBoxSeparatorWidget,
     2688            if (gParts->comboBoxSeparatorWidget) {
     2689                gtk_widget_style_get(gParts->comboBoxSeparatorWidget,
    27242690                                     "wide-separators", &wide_separators,
    27252691                                     "separator-width", &separator_width,
     
    27282694                if (!wide_separators)
    27292695                    separator_width =
    2730                         XTHICKNESS(gComboBoxSeparatorWidget->style);
     2696                        XTHICKNESS(gParts->comboBoxSeparatorWidget->style);
    27312697            }
    27322698
    2733             gtk_widget_size_request(gComboBoxArrowWidget, &arrow_req);
     2699            gtk_widget_size_request(gParts->comboBoxArrowWidget, &arrow_req);
    27342700
    27352701            if (direction == GTK_TEXT_DIR_RTL)
     
    27422708    case MOZ_GTK_TABPANELS:
    27432709        ensure_tab_widget();
    2744         w = gTabWidget;
     2710        w = gParts->tabWidget;
    27452711        break;
    27462712    case MOZ_GTK_PROGRESSBAR:
    27472713        ensure_progress_widget();
    2748         w = gProgressWidget;
     2714        w = gParts->progresWidget;
    27492715        break;
    27502716    case MOZ_GTK_SPINBUTTON_ENTRY:
     
    27522718    case MOZ_GTK_SPINBUTTON_DOWN:
    27532719        ensure_spin_widget();
    2754         w = gSpinWidget;
     2720        w = gParts->spinWidget;
    27552721        break;
    27562722    case MOZ_GTK_SCALE_HORIZONTAL:
    27572723        ensure_scale_widget();
    2758         w = gHScaleWidget;
     2724        w = gParts->hScaleWidget;
    27592725        break;
    27602726    case MOZ_GTK_SCALE_VERTICAL:
    27612727        ensure_scale_widget();
    2762         w = gVScaleWidget;
     2728        w = gParts->vScaleWidget;
    27632729        break;
    27642730    case MOZ_GTK_FRAME:
    27652731        ensure_frame_widget();
    2766         w = gFrameWidget;
     2732        w = gParts->frameWidget;
    27672733        break;
    27682734    case MOZ_GTK_CHECKBUTTON_LABEL:
     
    27762742            if (widget == MOZ_GTK_CHECKBUTTON_LABEL) {
    27772743                ensure_checkbox_widget();
    2778                 moz_gtk_widget_get_focus(gCheckboxWidget, &interior_focus,
     2744                moz_gtk_widget_get_focus(gParts->checkboxWidget, &interior_focus,
    27792745                                           &focus_width, &focus_pad);
    27802746            }
    27812747            else {
    27822748                ensure_radiobutton_widget();
    2783                 moz_gtk_widget_get_focus(gRadiobuttonWidget, &interior_focus,
     2749                moz_gtk_widget_get_focus(gParts->radiobuttonWidget, &interior_focus,
    27842750                                        &focus_width, &focus_pad);
    27852751            }
     
    28032769            if (widget == MOZ_GTK_CHECKBUTTON_CONTAINER) {
    28042770                ensure_checkbox_widget();
    2805                 moz_gtk_widget_get_focus(gCheckboxWidget, &interior_focus,
     2771                moz_gtk_widget_get_focus(gParts->checkboxWidget, &interior_focus,
    28062772                                           &focus_width, &focus_pad);
    2807                 w = gCheckboxWidget;
     2773                w = gParts->checkboxWidget;
    28082774            } else {
    28092775                ensure_radiobutton_widget();
    2810                 moz_gtk_widget_get_focus(gRadiobuttonWidget, &interior_focus,
     2776                moz_gtk_widget_get_focus(gParts->radiobuttonWidget, &interior_focus,
    28112777                                        &focus_width, &focus_pad);
    2812                 w = gRadiobuttonWidget;
     2778                w = gParts->radiobuttonWidget;
    28132779            }
    28142780
     
    28262792    case MOZ_GTK_MENUPOPUP:
    28272793        ensure_menu_popup_widget();
    2828         w = gMenuPopupWidget;
     2794        w = gParts->menuPopupWidget;
    28292795        break;
    28302796    case MOZ_GTK_MENUITEM:
    28312797        ensure_menu_item_widget();
    28322798        ensure_menu_bar_item_widget();
    2833         w = gMenuItemWidget;
     2799        w = gParts->menuItemWidget;
    28342800        break;
    28352801    case MOZ_GTK_CHECKMENUITEM:
    28362802    case MOZ_GTK_RADIOMENUITEM:
    28372803        ensure_check_menu_item_widget();
    2838         w = gCheckMenuItemWidget;
     2804        w = gParts->checkMenuItemWidget;
    28392805        break;
    28402806    case MOZ_GTK_TAB:
    28412807        ensure_tab_widget();
    2842         w = gTabWidget;
     2808        w = gParts->tabWidget;
    28432809        break;
    28442810    /* These widgets have no borders, since they are not containers. */
     
    28952861    ensure_combo_box_entry_widgets();
    28962862
    2897     gtk_widget_size_request(gComboBoxEntryButtonWidget, &requisition);
     2863    gtk_widget_size_request(gParts->comboBoxEntryButtonWidget, &requisition);
    28982864    *width = requisition.width;
    28992865    *height = requisition.height;
     
    29082874
    29092875    ensure_tab_widget();
    2910     gtk_widget_style_get(gTabWidget,
     2876    gtk_widget_style_get(gParts->tabWidget,
    29112877                         "scroll-arrow-hlength", &arrow_size,
    29122878                         NULL);
     
    29232889    ensure_button_arrow_widget();
    29242890
    2925     gtk_widget_size_request(gButtonArrowWidget, &requisition);
     2891    gtk_widget_size_request(gParts->buttonArrowWidget, &requisition);
    29262892    *width = requisition.width;
    29272893    *height = requisition.height;
     
    29392905    ensure_toolbar_widget();
    29402906
    2941     style = gToolbarWidget->style;
    2942 
    2943     gtk_widget_style_get(gToolbarWidget,
     2907    style = gParts->toolbarWidget->style;
     2908
     2909    gtk_widget_style_get(gParts->toolbarWidget,
    29442910                         "space-size", size,
    29452911                         "wide-separators",  &wide_separators,
     
    29572923{
    29582924    ensure_expander_widget();
    2959     gtk_widget_style_get(gExpanderWidget,
     2925    gtk_widget_style_get(gParts->expanderWidget,
    29602926                         "expander-size", size,
    29612927                         NULL);
     
    29682934{
    29692935    ensure_tree_view_widget();
    2970     gtk_widget_style_get(gTreeViewWidget,
     2936    gtk_widget_style_get(gParts->treeViewWidget,
    29712937                         "expander-size", size,
    29722938                         NULL);
     
    29832949    ensure_menu_separator_widget();
    29842950
    2985     gtk_widget_style_get(gMenuSeparatorWidget,
     2951    gtk_widget_style_get(gParts->menuSeparatorWidget,
    29862952                          "wide-separators",  &wide_separators,
    29872953                          "separator-height", &separator_height,
     
    29892955
    29902956    if (wide_separators)
    2991         *size = separator_height + gMenuSeparatorWidget->style->ythickness;
     2957        *size = separator_height + gParts->menuSeparatorWidget->style->ythickness;
    29922958    else
    2993         *size = gMenuSeparatorWidget->style->ythickness * 2;
     2959        *size = gParts->menuSeparatorWidget->style->ythickness * 2;
    29942960
    29952961    return MOZ_GTK_SUCCESS;
     
    30022968
    30032969  ensure_scale_widget();
    3004   widget = ((orient == GTK_ORIENTATION_HORIZONTAL) ? gHScaleWidget : gVScaleWidget);
     2970  widget = ((orient == GTK_ORIENTATION_HORIZONTAL) ? gParts->hScaleWidget : gParts->vScaleWidget);
    30052971
    30062972  gtk_widget_style_get (widget,
     
    30172983    ensure_scrollbar_widget();
    30182984
    3019     gtk_widget_style_get (gHorizScrollbarWidget,
     2985    gtk_widget_style_get (gParts->horizScrollbarWidget,
    30202986                          "slider_width", &metrics->slider_width,
    30212987                          "trough_border", &metrics->trough_border,
     
    30252991
    30262992    metrics->min_slider_size =
    3027         GTK_RANGE(gHorizScrollbarWidget)->min_slider_size;
     2993        GTK_RANGE(gParts->horizScrollbarWidget)->min_slider_size;
    30282994
    30292995    return MOZ_GTK_SUCCESS;
     
    30373003
    30383004    ensure_image_menu_item_widget();
    3039     settings = gtk_widget_get_settings(gImageMenuItemWidget);
     3005    settings = gtk_widget_get_settings(gParts->imageMenuItemWidget);
    30403006
    30413007    g_object_get(settings, "gtk-menu-images", &result, NULL);
     
    30553021            return moz_gtk_button_paint(drawable, rect, cliprect, state,
    30563022                                        (GtkReliefStyle) flags,
    3057                                         gToggleButtonWidget, direction);
     3023                                        gParts->toggleButtonWidget, direction);
    30583024        }
    30593025        ensure_button_widget();
    30603026        return moz_gtk_button_paint(drawable, rect, cliprect, state,
    3061                                     (GtkReliefStyle) flags, gButtonWidget,
     3027                                    (GtkReliefStyle) flags, gParts->buttonWidget,
    30623028                                    direction);
    30633029        break;
     
    31073073        ensure_spin_widget();
    31083074        return moz_gtk_entry_paint(drawable, rect, cliprect, state,
    3109                                    gSpinWidget, direction);
     3075                                   gParts->spinWidget, direction);
    31103076        break;
    31113077    case MOZ_GTK_GRIPPER:
     
    31383104        ensure_entry_widget();
    31393105        return moz_gtk_entry_paint(drawable, rect, cliprect, state,
    3140                                    gEntryWidget, direction);
     3106                                   gParts->entryWidget, direction);
    31413107        break;
    31423108    case MOZ_GTK_ENTRY_CARET:
     
    31543120        ensure_combo_box_entry_widgets();
    31553121        return moz_gtk_entry_paint(drawable, rect, cliprect, state,
    3156                                    gComboBoxEntryTextareaWidget, direction);
     3122                                   gParts->comboBoxEntryTextareaWidget, direction);
    31573123        break;
    31583124    case MOZ_GTK_CHECKBUTTON_CONTAINER:
     
    32523218        return NULL;
    32533219    ensure_scrollbar_widget();
    3254     return gHorizScrollbarWidget;
     3220    return gParts->horizScrollbarWidget;
    32553221}
    32563222
     
    32593225{
    32603226    GtkWidgetClass *entry_class;
    3261 
    3262     if (gTooltipWidget)
    3263         gtk_widget_destroy(gTooltipWidget);
    3264     /* This will destroy all of our widgets */
    3265     if (gProtoWindow)
    3266         gtk_widget_destroy(gProtoWindow);
    3267 
    3268     gProtoWindow = NULL;
    3269     gProtoLayout = NULL;
    3270     gButtonWidget = NULL;
    3271     gToggleButtonWidget = NULL;
    3272     gButtonArrowWidget = NULL;
    3273     gCheckboxWidget = NULL;
    3274     gRadiobuttonWidget = NULL;
    3275     gHorizScrollbarWidget = NULL;
    3276     gVertScrollbarWidget = NULL;
    3277     gSpinWidget = NULL;
    3278     gHScaleWidget = NULL;
    3279     gVScaleWidget = NULL;
    3280     gEntryWidget = NULL;
    3281     gComboBoxWidget = NULL;
    3282     gComboBoxButtonWidget = NULL;
    3283     gComboBoxSeparatorWidget = NULL;
    3284     gComboBoxArrowWidget = NULL;
    3285     gComboBoxEntryWidget = NULL;
    3286     gComboBoxEntryButtonWidget = NULL;
    3287     gComboBoxEntryArrowWidget = NULL;
    3288     gComboBoxEntryTextareaWidget = NULL;
    3289     gHandleBoxWidget = NULL;
    3290     gToolbarWidget = NULL;
    3291     gStatusbarWidget = NULL;
    3292     gFrameWidget = NULL;
    3293     gProgressWidget = NULL;
    3294     gTabWidget = NULL;
    3295     gTooltipWidget = NULL;
    3296     gMenuBarWidget = NULL;
    3297     gMenuBarItemWidget = NULL;
    3298     gMenuPopupWidget = NULL;
    3299     gMenuItemWidget = NULL;
    3300     gImageMenuItemWidget = NULL;
    3301     gCheckMenuItemWidget = NULL;
    3302     gTreeViewWidget = NULL;
    3303     gMiddleTreeViewColumn = NULL;
    3304     gTreeHeaderCellWidget = NULL;
    3305     gTreeHeaderSortArrowWidget = NULL;
    3306     gExpanderWidget = NULL;
    3307     gToolbarSeparatorWidget = NULL;
    3308     gMenuSeparatorWidget = NULL;
    3309     gHPanedWidget = NULL;
    3310     gVPanedWidget = NULL;
    3311     gScrolledWindowWidget = NULL;
    3312 
    33133227    entry_class = g_type_class_peek(GTK_TYPE_ENTRY);
    33143228    g_type_class_unref(entry_class);
     
    33183232    return MOZ_GTK_SUCCESS;
    33193233}
     3234
     3235void moz_gtk_destroy_theme_parts_widgets(GtkThemeParts* parts)
     3236{
     3237    if (!parts)
     3238        return;
     3239
     3240    if (parts->tooltipWidget) {
     3241        gtk_widget_destroy(parts->tooltipWidget);
     3242        parts->tooltipWidget = NULL;
     3243    }
     3244
     3245    if (parts->protoWindow) {
     3246        gtk_widget_destroy(parts->protoWindow);
     3247        parts->protoWindow = NULL;
     3248    }
     3249}
  • trunk/WebCore/platform/gtk/gtkdrawing.h

    r52421 r53372  
    7777  gint min_slider_size;
    7878} MozGtkScrollbarMetrics;
     79
     80typedef struct _GtkThemeParts {
     81    GdkColormap* colormap;
     82    GtkWidget* protoWindow;
     83    GtkWidget* protoLayout;
     84    GtkWidget* buttonWidget;
     85    GtkWidget* toggleButtonWidget;
     86    GtkWidget* buttonArrowWidget;
     87    GtkWidget* checkboxWidget;
     88    GtkWidget* radiobuttonWidget;
     89    GtkWidget* horizScrollbarWidget;
     90    GtkWidget* vertScrollbarWidget;
     91    GtkWidget* spinWidget;
     92    GtkWidget* hScaleWidget;
     93    GtkWidget* vScaleWidget;
     94    GtkWidget* entryWidget;
     95    GtkWidget* comboBoxWidget;
     96    GtkWidget* comboBoxButtonWidget;
     97    GtkWidget* comboBoxArrowWidget;
     98    GtkWidget* comboBoxSeparatorWidget;
     99    GtkWidget* comboBoxEntryWidget;
     100    GtkWidget* comboBoxEntryTextareaWidget;
     101    GtkWidget* comboBoxEntryButtonWidget;
     102    GtkWidget* comboBoxEntryArrowWidget;
     103    GtkWidget* handleBoxWidget;
     104    GtkWidget* toolbarWidget;
     105    GtkWidget* frameWidget;
     106    GtkWidget* statusbarWidget;
     107    GtkWidget* progresWidget;
     108    GtkWidget* tabWidget;
     109    GtkWidget* tooltipWidget;
     110    GtkWidget* menuBarWidget;
     111    GtkWidget* menuBarItemWidget;
     112    GtkWidget* menuPopupWidget;
     113    GtkWidget* menuItemWidget;
     114    GtkWidget* imageMenuItemWidget;
     115    GtkWidget* checkMenuItemWidget;
     116    GtkWidget* treeViewWidget;
     117    GtkTreeViewColumn* middleTreeViewColumn;
     118    GtkWidget* treeHeaderCellWidget;
     119    GtkWidget* treeHeaderSortArrowWidget;
     120    GtkWidget* expanderWidget;
     121    GtkWidget* toolbarSeparatorWidget;
     122    GtkWidget* menuSeparatorWidget;
     123    GtkWidget* hpanedWidget;
     124    GtkWidget* vpanedWidget;
     125    GtkWidget* scrolledWindowWidget;
     126} GtkThemeParts;
    79127
    80128typedef enum {
     
    226274
    227275/**
     276 * Instruct the drawing library to do all rendering based on
     277 * the given collection of theme parts. If any members of the
     278 * GtkThemeParts struct are NULL, they will be created lazily.
     279 */
     280void
     281moz_gtk_use_theme_parts(GtkThemeParts* parts);
     282
     283/**
    228284 * Enable GTK+ 1.2.9+ theme enhancements. You must provide a pointer
    229285 * to the GTK+ 1.2.9+ function "gtk_style_get_prop_experimental".
     
    242298gint moz_gtk_shutdown();
    243299
     300/**
     301 * Destroy the widgets in the given GtkThemeParts, which should
     302 * be destroyed before the GtkThemeParts can be freed.
     303 */
     304void moz_gtk_destroy_theme_parts_widgets(GtkThemeParts* parts);
    244305
    245306/*** Widget drawing ***/
Note: See TracChangeset for help on using the changeset viewer.