Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions main/vcl/inc/unx/gtk/gtkframe.hxx
Original file line number Diff line number Diff line change
Expand Up @@ -279,6 +279,12 @@ public:
GtkSalDisplay* getDisplay();
GdkDisplay* getGdkDisplay();
GtkWidget* getWindow() const { return m_pWindow; }
GdkWindow* getGdkWindow() const { return m_pWindow ? gtk_widget_get_window( m_pWindow ) : NULL; }
XLIB_Window getXWindow() const
{
GdkWindow* pWin = getGdkWindow();
return pWin ? GDK_WINDOW_XWINDOW( pWin ) : None;
}
GtkFixed* getFixedContainer() const { return m_pFixedContainer; }
GdkWindow* getForeignParent() const { return m_pForeignParent; }
GdkNativeWindow getForeignParentWindow() const { return m_aForeignParentWindow; }
Expand Down
3 changes: 1 addition & 2 deletions main/vcl/inc/unx/gtk/gtkgdi.hxx
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,7 @@ public:
{}
virtual ~GtkSalGraphics();

inline GtkWidget* GetGtkWidget() const { return m_pWindow; }
inline GdkWindow* GetGdkWindow() const { return m_pWindow->window; }
inline GdkWindow* GetGdkWindow() const { return m_pWindow ? gtk_widget_get_window( m_pWindow ) : NULL; }
inline GtkSalFrame* GetGtkFrame() const { return static_cast<GtkSalFrame*>(m_pFrame); }
void SetWindow( GtkWidget* window ) { m_pWindow = window; }

Expand Down
87 changes: 33 additions & 54 deletions main/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ sal_Bool GtkSalGraphics::bNeedButtonStyleAsEditBackgroundWorkaround = sal_False;

GtkSalGraphics::~GtkSalGraphics()
{
m_pWindow = NULL;
}


Expand Down Expand Up @@ -144,7 +145,7 @@ struct NWFWidgetData
// Keep a hash table of Widgets->default flags so that we can
// easily and quickly reset each to a default state before using
// them
static std::hash_map<long, guint> gWidgetDefaultFlags;
static std::hash_map<sal_IntPtr, guint> gWidgetDefaultFlags;
static std::vector<NWFWidgetData> gWidgetData;

static const GtkBorder aDefDefBorder = { 1, 1, 1, 1 };
Expand Down Expand Up @@ -463,6 +464,8 @@ void GtkData::deInitNWF( void )
delete gWidgetData[i].gNWPixmapCacheList;
gWidgetData[i].gNWPixmapCacheList = NULL;
}
gWidgetDefaultFlags.clear();
gWidgetData.clear();
}


Expand Down Expand Up @@ -492,7 +495,7 @@ void GtkSalGraphics::copyBits( const SalTwoRect& rPosAry,
if( pFrame && m_pWindow )
{
/* #i64117# some themes set the background pixmap VERY frequently */
GdkWindow* pWin = GTK_WIDGET(m_pWindow)->window;
GdkWindow* pWin = GetGdkWindow();
if( pWin )
{
aWin = GDK_WINDOW_XWINDOW(pWin);
Expand Down Expand Up @@ -736,6 +739,8 @@ sal_Bool GtkSalGraphics::drawNativeControl( ControlType nType,

clipList aClip;
GdkDrawable* gdkDrawable = GDK_DRAWABLE( GetGdkWindow() );
if( !gdkDrawable )
return sal_False;
GdkPixmap* pixmap = NULL;
Rectangle aPixmapRect;
if( ( bNeedPixmapPaint )
Expand Down Expand Up @@ -2319,7 +2324,7 @@ sal_Bool GtkSalGraphics::NWPaintGTKTabItem( ControlType nType, ControlPart,
paintRect.width = pixmapRect.GetWidth();
paintRect.height = pixmapRect.GetHeight();

gtk_paint_flat_box( m_pWindow->style, pixmap, GTK_STATE_NORMAL,
gtk_paint_flat_box( gtk_widget_get_style( m_pWindow ), pixmap, GTK_STATE_NORMAL,
GTK_SHADOW_NONE, &paintRect, m_pWindow, "base", 0, 0, -1, -1);

NWSetWidgetState( gWidgetData[m_nScreen].gNotebookWidget, nState, stateType );
Expand Down Expand Up @@ -2495,10 +2500,6 @@ sal_Bool GtkSalGraphics::NWPaintGTKToolbar(
{
NWSetWidgetState( gWidgetData[m_nScreen].gToolbarWidget, nState, stateType );

GTK_WIDGET_UNSET_FLAGS( gWidgetData[m_nScreen].gToolbarWidget, GTK_SENSITIVE );
if ( nState & CTRL_STATE_ENABLED )
GTK_WIDGET_SET_FLAGS( gWidgetData[m_nScreen].gToolbarWidget, GTK_SENSITIVE );

if( nPart == PART_DRAW_BACKGROUND_HORZ )
gtk_toolbar_set_orientation( GTK_TOOLBAR(gWidgetData[m_nScreen].gToolbarWidget), GTK_ORIENTATION_HORIZONTAL );
else
Expand All @@ -2509,10 +2510,6 @@ sal_Bool GtkSalGraphics::NWPaintGTKToolbar(
{
NWSetWidgetState( gWidgetData[m_nScreen].gHandleBoxWidget, nState, stateType );

GTK_WIDGET_UNSET_FLAGS( gWidgetData[m_nScreen].gHandleBoxWidget, GTK_SENSITIVE );
if ( nState & CTRL_STATE_ENABLED )
GTK_WIDGET_SET_FLAGS( gWidgetData[m_nScreen].gHandleBoxWidget, GTK_SENSITIVE );

gtk_handle_box_set_shadow_type( GTK_HANDLE_BOX(gWidgetData[m_nScreen].gHandleBoxWidget), shadowType );

// evaluate grip rect
Expand Down Expand Up @@ -2659,10 +2656,6 @@ sal_Bool GtkSalGraphics::NWPaintGTKMenubar(
{
NWSetWidgetState( gWidgetData[m_nScreen].gMenubarWidget, nState, stateType );

GTK_WIDGET_UNSET_FLAGS( gWidgetData[m_nScreen].gMenubarWidget, GTK_SENSITIVE );
if ( nState & CTRL_STATE_ENABLED )
GTK_WIDGET_SET_FLAGS( gWidgetData[m_nScreen].gMenubarWidget, GTK_SENSITIVE );

// #118704# for translucent menubar styles paint background first
gtk_paint_flat_box( gWidgetData[m_nScreen].gMenubarWidget->style,
gdkDrawable,
Expand Down Expand Up @@ -2737,10 +2730,6 @@ sal_Bool GtkSalGraphics::NWPaintGTKPopupMenu(

NWSetWidgetState( gWidgetData[m_nScreen].gMenuWidget, nState, stateType );

GTK_WIDGET_UNSET_FLAGS( gWidgetData[m_nScreen].gMenuWidget, GTK_SENSITIVE );
if ( nState & CTRL_STATE_ENABLED )
GTK_WIDGET_SET_FLAGS( gWidgetData[m_nScreen].gMenuWidget, GTK_SENSITIVE );

for( clipList::const_iterator it = rClipList.begin(); it != rClipList.end(); ++it )
{
clipRect.x = it->Left();
Expand Down Expand Up @@ -3642,7 +3631,10 @@ void GtkSalGraphics::updateSettings( AllSettings& rSettings )
GdkPixmap* GtkSalGraphics::NWGetPixmapFromScreen( Rectangle srcRect )
{
// Create a new pixmap to hold the composite of the window background and the control
GdkPixmap * pPixmap = gdk_pixmap_new( GDK_DRAWABLE(GetGdkWindow()), srcRect.GetWidth(), srcRect.GetHeight(), -1 );
GdkWindow* pWin = GetGdkWindow();
if( !pWin )
return NULL;
GdkPixmap * pPixmap = gdk_pixmap_new( GDK_DRAWABLE(pWin), srcRect.GetWidth(), srcRect.GetHeight(), -1 );
GdkGC * pPixmapGC = gdk_gc_new( pPixmap );

if( !pPixmap || !pPixmapGC )
Expand Down Expand Up @@ -3739,7 +3731,7 @@ static void NWSetWidgetState( GtkWidget* widget, ControlState nState, GtkStateTy
GTK_WIDGET_UNSET_FLAGS( widget, GTK_HAS_DEFAULT );
GTK_WIDGET_UNSET_FLAGS( widget, GTK_HAS_FOCUS );
GTK_WIDGET_UNSET_FLAGS( widget, GTK_SENSITIVE );
GTK_WIDGET_SET_FLAGS( widget, gWidgetDefaultFlags[(long)widget] );
GTK_WIDGET_SET_FLAGS( widget, gWidgetDefaultFlags[(sal_IntPtr)widget] );

if ( nState & CTRL_STATE_DEFAULT )
GTK_WIDGET_SET_FLAGS( widget, GTK_HAS_DEFAULT );
Expand All @@ -3756,6 +3748,15 @@ static void NWSetWidgetState( GtkWidget* widget, ControlState nState, GtkStateTy

//-------------------------------------

static void NWInitWidget( GtkWidget* widget )
{
gtk_widget_realize( widget );
gtk_widget_ensure_style( widget );

// Store widget's default flags
gWidgetDefaultFlags[ (sal_IntPtr)widget ] = GTK_WIDGET_FLAGS( widget );
}

static void NWAddWidgetToCacheWindow( GtkWidget* widget, int nScreen )
{
NWFWidgetData& rData = gWidgetData[nScreen];
Expand All @@ -3776,11 +3777,7 @@ static void NWAddWidgetToCacheWindow( GtkWidget* widget, int nScreen )
}

gtk_container_add( GTK_CONTAINER(rData.gDumbContainer), widget );
gtk_widget_realize( widget );
gtk_widget_ensure_style( widget );

// Store widget's default flags
gWidgetDefaultFlags[ (long)widget ] = GTK_WIDGET_FLAGS( widget );
NWInitWidget( widget );
}

//-------------------------------------
Expand Down Expand Up @@ -3952,13 +3949,13 @@ static void NWEnsureGTKToolbar( int nScreen )
(char *)NULL);

gtk_button_set_relief( GTK_BUTTON(gWidgetData[nScreen].gToolbarButtonWidget), aRelief );
GTK_WIDGET_UNSET_FLAGS( gWidgetData[nScreen].gToolbarButtonWidget, GTK_CAN_FOCUS );
GTK_WIDGET_UNSET_FLAGS( gWidgetData[nScreen].gToolbarButtonWidget, GTK_CAN_DEFAULT );
gtk_widget_set_can_focus( gWidgetData[nScreen].gToolbarButtonWidget, FALSE );
gtk_widget_set_can_default( gWidgetData[nScreen].gToolbarButtonWidget, FALSE );
NWAddWidgetToCacheWindow( gWidgetData[nScreen].gToolbarButtonWidget, nScreen );

gtk_button_set_relief( GTK_BUTTON(gWidgetData[nScreen].gToolbarToggleWidget), aRelief );
GTK_WIDGET_UNSET_FLAGS( gWidgetData[nScreen].gToolbarToggleWidget, GTK_CAN_FOCUS );
GTK_WIDGET_UNSET_FLAGS( gWidgetData[nScreen].gToolbarToggleWidget, GTK_CAN_DEFAULT );
gtk_widget_set_can_focus( gWidgetData[nScreen].gToolbarToggleWidget, FALSE );
gtk_widget_set_can_default( gWidgetData[nScreen].gToolbarToggleWidget, FALSE );
NWAddWidgetToCacheWindow( gWidgetData[nScreen].gToolbarToggleWidget, nScreen );
}
if( ! gWidgetData[nScreen].gHandleBoxWidget )
Expand All @@ -3982,10 +3979,7 @@ static void NWEnsureGTKMenubar( int nScreen )
gtk_widget_show( gWidgetData[nScreen].gMenubarWidget );

// do what NWAddWidgetToCacheWindow does except adding to def container
gtk_widget_realize( gWidgetData[nScreen].gMenuItemMenubarWidget );
gtk_widget_ensure_style( gWidgetData[nScreen].gMenuItemMenubarWidget );

gWidgetDefaultFlags[ (long)gWidgetData[nScreen].gMenuItemMenubarWidget ] = GTK_WIDGET_FLAGS( gWidgetData[nScreen].gMenuItemMenubarWidget );
NWInitWidget( gWidgetData[nScreen].gMenuItemMenubarWidget );
}
}

Expand All @@ -4005,26 +3999,11 @@ static void NWEnsureGTKMenu( int nScreen )
gtk_menu_shell_append( GTK_MENU_SHELL( gWidgetData[nScreen].gMenuWidget ), gWidgetData[nScreen].gImageMenuItem );

// do what NWAddWidgetToCacheWindow does except adding to def container
gtk_widget_realize( gWidgetData[nScreen].gMenuWidget );
gtk_widget_ensure_style( gWidgetData[nScreen].gMenuWidget );

gtk_widget_realize( gWidgetData[nScreen].gMenuItemMenuWidget );
gtk_widget_ensure_style( gWidgetData[nScreen].gMenuItemMenuWidget );

gtk_widget_realize( gWidgetData[nScreen].gMenuItemCheckMenuWidget );
gtk_widget_ensure_style( gWidgetData[nScreen].gMenuItemCheckMenuWidget );

gtk_widget_realize( gWidgetData[nScreen].gMenuItemRadioMenuWidget );
gtk_widget_ensure_style( gWidgetData[nScreen].gMenuItemRadioMenuWidget );

gtk_widget_realize( gWidgetData[nScreen].gImageMenuItem );
gtk_widget_ensure_style( gWidgetData[nScreen].gImageMenuItem );

gWidgetDefaultFlags[ (long)gWidgetData[nScreen].gMenuWidget ] = GTK_WIDGET_FLAGS( gWidgetData[nScreen].gMenuWidget );
gWidgetDefaultFlags[ (long)gWidgetData[nScreen].gMenuItemMenuWidget ] = GTK_WIDGET_FLAGS( gWidgetData[nScreen].gMenuItemMenuWidget );
gWidgetDefaultFlags[ (long)gWidgetData[nScreen].gMenuItemCheckMenuWidget ] = GTK_WIDGET_FLAGS( gWidgetData[nScreen].gMenuItemCheckMenuWidget );
gWidgetDefaultFlags[ (long)gWidgetData[nScreen].gMenuItemRadioMenuWidget ] = GTK_WIDGET_FLAGS( gWidgetData[nScreen].gMenuItemRadioMenuWidget );
gWidgetDefaultFlags[ (long)gWidgetData[nScreen].gImageMenuItem ] = GTK_WIDGET_FLAGS( gWidgetData[nScreen].gImageMenuItem );
NWInitWidget( gWidgetData[nScreen].gMenuWidget );
NWInitWidget( gWidgetData[nScreen].gMenuItemMenuWidget );
NWInitWidget( gWidgetData[nScreen].gMenuItemCheckMenuWidget );
NWInitWidget( gWidgetData[nScreen].gMenuItemRadioMenuWidget );
NWInitWidget( gWidgetData[nScreen].gImageMenuItem );
}
}

Expand Down
Loading