File indexing completed on 2024-05-12 05:34:35

0001 /*
0002     this file is part of the oxygen gtk engine
0003     SPDX-FileCopyrightText: 2010 Hugo Pereira Da Costa <hugo.pereira@free.fr>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #include "oxygenpaneddata.h"
0009 
0010 #include <cassert>
0011 
0012 namespace Oxygen
0013 {
0014 
0015     //_______________________________________________
0016     void PanedData::connect( GtkWidget* widget )
0017     {
0018         updateCursor( widget );
0019         _realizeId.connect( G_OBJECT(widget), "realize", G_CALLBACK( realizeEvent ), this );
0020     }
0021 
0022     //_______________________________________________
0023     void PanedData::disconnect( GtkWidget* )
0024     { _realizeId.disconnect(); }
0025 
0026     //_______________________________________________
0027     void PanedData::realizeEvent( GtkWidget* widget, gpointer data )
0028     { static_cast<PanedData*>( data )->updateCursor( widget ); }
0029 
0030     //_______________________________________________
0031     void PanedData::updateCursor( GtkWidget* widget )
0032     {
0033 
0034         // do nothing if incorrect widget type
0035         if( !GTK_IS_PANED( widget ) ) return;
0036 
0037         // load cursor if needed
0038         if( !_cursorLoaded )
0039         {
0040             assert( !_cursor );
0041 
0042             GdkDisplay *display( gtk_widget_get_display( widget ) );
0043             _cursor = gdk_cursor_new_from_name( display, GTK_IS_VPANED( widget ) ? "col-resize":"row-resize" );
0044             _cursorLoaded = true;
0045 
0046         }
0047 
0048         // assign to widget
0049         if( _cursor )
0050         {
0051 
0052             // load handle window
0053             #if GTK_CHECK_VERSION(2, 20, 0)
0054             GdkWindow* window(  gtk_paned_get_handle_window( GTK_PANED( widget ) ) );
0055             #else
0056             GdkWindow* window( GTK_PANED( widget )->handle );
0057             #endif
0058 
0059             // assign cursor
0060             gdk_window_set_cursor( window, _cursor );
0061 
0062         }
0063 
0064     }
0065 
0066 }