X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fnetradiant.git;a=blobdiff_plain;f=libs%2Fgtkutil%2Fwindow.h;h=1a7161e6dfd34d1b32c63889d86002995b7ac4c6;hp=5ab1e5005b3e53612ee5083dbb0bfe674aed7cae;hb=e4287c28bb2dafedc81c66e63951d947cfbeb225;hpb=203343b01a7ad87cb3d136689c9936ff5bc23c01 diff --git a/libs/gtkutil/window.h b/libs/gtkutil/window.h index 5ab1e500..1a7161e6 100644 --- a/libs/gtkutil/window.h +++ b/libs/gtkutil/window.h @@ -1,25 +1,25 @@ /* -Copyright (C) 2001-2006, William Joseph. -All Rights Reserved. + Copyright (C) 2001-2006, William Joseph. + All Rights Reserved. -This file is part of GtkRadiant. + This file is part of GtkRadiant. -GtkRadiant is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. + GtkRadiant is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. -GtkRadiant is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. + GtkRadiant is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. -You should have received a copy of the GNU General Public License -along with GtkRadiant; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ + You should have received a copy of the GNU General Public License + along with GtkRadiant; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ -#if !defined(INCLUDED_GTKUTIL_WINDOW_H) +#if !defined( INCLUDED_GTKUTIL_WINDOW_H ) #define INCLUDED_GTKUTIL_WINDOW_H #include @@ -28,88 +28,78 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "generic/callback.h" #include "widget.h" -inline gboolean window_focus_in_clear_focus_widget(GtkWidget* widget, GdkEventKey* event, gpointer data) -{ - gtk_window_set_focus(GTK_WINDOW(widget), NULL); - return FALSE; +inline gboolean window_focus_in_clear_focus_widget( GtkWidget* widget, GdkEventKey* event, gpointer data ){ + gtk_window_set_focus( GTK_WINDOW( widget ), NULL ); + return FALSE; } -inline guint window_connect_focus_in_clear_focus_widget(GtkWindow* window) -{ - return g_signal_connect(G_OBJECT(window), "focus_in_event", G_CALLBACK(window_focus_in_clear_focus_widget), NULL); +inline guint window_connect_focus_in_clear_focus_widget( GtkWindow* window ){ + return g_signal_connect( G_OBJECT( window ), "focus_in_event", G_CALLBACK( window_focus_in_clear_focus_widget ), NULL ); } -unsigned int connect_floating(GtkWindow* main_window, GtkWindow* floating); -GtkWindow* create_floating_window(const char* title, GtkWindow* parent); -void destroy_floating_window(GtkWindow* window); +unsigned int connect_floating( GtkWindow* main_window, GtkWindow* floating ); +GtkWindow* create_floating_window( const char* title, GtkWindow* parent ); +void destroy_floating_window( GtkWindow* window ); -GtkWindow* create_persistent_floating_window(const char* title, GtkWindow* main_window); -gboolean persistent_floating_window_delete(GtkWindow* floating, GdkEvent *event, GtkWindow* main_window); +GtkWindow* create_persistent_floating_window( const char* title, GtkWindow* main_window ); +gboolean persistent_floating_window_delete( GtkWindow* floating, GdkEvent *event, GtkWindow* main_window ); -void window_remove_minmax(GtkWindow* window); +void window_remove_minmax( GtkWindow* window ); typedef struct _GtkScrolledWindow GtkScrolledWindow; -GtkScrolledWindow* create_scrolled_window(GtkPolicyType hscrollbar_policy, GtkPolicyType vscrollbar_policy, int border = 0); +GtkScrolledWindow* create_scrolled_window( GtkPolicyType hscrollbar_policy, GtkPolicyType vscrollbar_policy, int border = 0 ); struct WindowPosition { - int x, y, w, h; - - WindowPosition() - { - } - WindowPosition(int _x, int _y, int _w, int _h) - : x(_x), y(_y), w(_w), h(_h) - { - } + int x, y, w, h; + + WindowPosition(){ + } + WindowPosition( int _x, int _y, int _w, int _h ) + : x( _x ), y( _y ), w( _w ), h( _h ){ + } }; -const WindowPosition c_default_window_pos(50, 25, 400, 300); +const WindowPosition c_default_window_pos( 50, 25, 400, 300 ); -inline void window_get_position(GtkWindow* window, WindowPosition& position) -{ - ASSERT_MESSAGE(window != 0, "error saving window position"); +inline void window_get_position( GtkWindow* window, WindowPosition& position ){ + ASSERT_MESSAGE( window != 0, "error saving window position" ); - gtk_window_get_position(window, &position.x, &position.y); - gtk_window_get_size(window, &position.w, &position.h); + gtk_window_get_position( window, &position.x, &position.y ); + gtk_window_get_size( window, &position.w, &position.h ); } -inline void window_set_position(GtkWindow* window, const WindowPosition& position) -{ - gtk_window_set_gravity(window, GDK_GRAVITY_STATIC); - - GdkScreen* screen = gdk_screen_get_default(); - if(position.x < 0 - || position.y < 0 - || position.x > gdk_screen_get_width(screen) - || position.y > gdk_screen_get_height(screen)) - { - gtk_window_set_position(window, GTK_WIN_POS_CENTER_ON_PARENT); - } - else - { - gtk_window_move(window, position.x, position.y); - } - - gtk_window_set_default_size(window, position.w, position.h); +inline void window_set_position( GtkWindow* window, const WindowPosition& position ){ + gtk_window_set_gravity( window, GDK_GRAVITY_STATIC ); + + GdkScreen* screen = gdk_screen_get_default(); + if ( position.x < 0 + || position.y < 0 + || position.x > gdk_screen_get_width( screen ) + || position.y > gdk_screen_get_height( screen ) ) { + gtk_window_set_position( window, GTK_WIN_POS_CENTER_ON_PARENT ); + } + else + { + gtk_window_move( window, position.x, position.y ); + } + + gtk_window_set_default_size( window, position.w, position.h ); } -inline void WindowPosition_Parse(WindowPosition& position, const char* value) -{ - if(sscanf(value, "%d %d %d %d", &position.x, &position.y, &position.w, &position.h) != 4) - { - position = WindowPosition(c_default_window_pos); // ensure sane default value for window position - } +inline void WindowPosition_Parse( WindowPosition& position, const char* value ){ + if ( sscanf( value, "%d %d %d %d", &position.x, &position.y, &position.w, &position.h ) != 4 ) { + position = WindowPosition( c_default_window_pos ); // ensure sane default value for window position + } } typedef ReferenceCaller1 WindowPositionImportStringCaller; -inline void WindowPosition_Write(const WindowPosition& position, const StringImportCallback& importCallback) -{ - char buffer[64]; - sprintf(buffer, "%d %d %d %d", position.x, position.y, position.w, position.h); - importCallback(buffer); +inline void WindowPosition_Write( const WindowPosition& position, const StringImportCallback& importCallback ){ + char buffer[64]; + sprintf( buffer, "%d %d %d %d", position.x, position.y, position.w, position.h ); + importCallback( buffer ); } typedef ConstReferenceCaller1 WindowPositionExportStringCaller; @@ -117,55 +107,47 @@ typedef ConstReferenceCaller1m_position = WindowPosition(event->x, event->y, event->width, event->height); - return FALSE; - } +static gboolean configure( GtkWidget* widget, GdkEventConfigure *event, WindowPositionTracker* self ){ + self->m_position = WindowPosition( event->x, event->y, event->width, event->height ); + return FALSE; +} public: - WindowPositionTracker() - : m_position(c_default_window_pos) - { - } - - void sync(GtkWindow* window) - { - window_set_position(window, m_position); - } - - void connect(GtkWindow* window) - { - sync(window); - g_signal_connect(G_OBJECT(window), "configure_event", G_CALLBACK(configure), this); - } - - const WindowPosition& getPosition() const - { - return m_position; - } - - //hack - void setPosition(const WindowPosition& position) - { - m_position = position; - } +WindowPositionTracker() + : m_position( c_default_window_pos ){ +} + +void sync( GtkWindow* window ){ + window_set_position( window, m_position ); +} + +void connect( GtkWindow* window ){ + sync( window ); + g_signal_connect( G_OBJECT( window ), "configure_event", G_CALLBACK( configure ), this ); +} + +const WindowPosition& getPosition() const { + return m_position; +} + +//hack +void setPosition( const WindowPosition& position ){ + m_position = position; +} }; -inline void WindowPositionTracker_importString(WindowPositionTracker& self, const char* value) -{ - WindowPosition position; - WindowPosition_Parse(position, value); - self.setPosition(position); +inline void WindowPositionTracker_importString( WindowPositionTracker& self, const char* value ){ + WindowPosition position; + WindowPosition_Parse( position, value ); + self.setPosition( position ); } typedef ReferenceCaller1 WindowPositionTrackerImportStringCaller; -inline void WindowPositionTracker_exportString(const WindowPositionTracker& self, const StringImportCallback& importer) -{ - WindowPosition_Write(self.getPosition(), importer); +inline void WindowPositionTracker_exportString( const WindowPositionTracker& self, const StringImportCallback& importer ){ + WindowPosition_Write( self.getPosition(), importer ); } typedef ConstReferenceCaller1 WindowPositionTrackerExportStringCaller;