X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=radiant%2Ftexwindow.cpp;h=00969834e90e47146e3a65723589043bb39c1885;hb=54a2bda443aace9c00a1615af10cc1dc8b1f0cd1;hp=f0e331c4f68f399e672bf5aa7f499d1ba9b1696f;hpb=ddee6cbe7c5fcbba52e7881a411f310809b867f9;p=xonotic%2Fnetradiant.git diff --git a/radiant/texwindow.cpp b/radiant/texwindow.cpp index f0e331c4..00969834 100644 --- a/radiant/texwindow.cpp +++ b/radiant/texwindow.cpp @@ -393,10 +393,10 @@ TextureBrowser() : m_rmbSelected( false ), m_searchedTags( false ), m_tags( false ), + m_move_started( false ), m_uniformTextureSize( 160 ), m_uniformTextureMinSize( 48 ), - m_hideNonShadersInCommon( true ), - m_move_started( false ){ + m_hideNonShadersInCommon( true ){ } }; @@ -868,6 +868,7 @@ void visit( const char* minor, const _QERPlugImageTable& table ) const { }; void TextureBrowser_ShowDirectory( TextureBrowser& textureBrowser, const char* directory ){ + textureBrowser.m_searchedTags = false; if ( TextureBrowser_showWads() ) { Archive* archive = GlobalFileSystem().getArchive( directory ); ASSERT_NOTNULL( archive ); @@ -1075,19 +1076,10 @@ IShader* Texture_At( TextureBrowser& textureBrowser, int mx, int my ){ By mouse click ============== */ -void SelectTexture( TextureBrowser& textureBrowser, int mx, int my, bool bShift ){ - IShader* shader = Texture_At( textureBrowser, mx, my ); - if ( shader != 0 ) { - if ( bShift ) { - if ( shader->IsDefault() ) { - globalOutputStream() << "ERROR: " << shader->getName() << " is not a shader, it's a texture.\n"; - } - else{ - ViewShader( shader->getShaderFileName(), shader->getName() ); - } - } - else - { +void SelectTexture( TextureBrowser& textureBrowser, int mx, int my, guint32 flags ){ + if ( ( flags & GDK_SHIFT_MASK ) == 0 ) { + IShader* shader = Texture_At( textureBrowser, mx, my ); + if ( shader != 0 ) { TextureBrowser_SetSelectedShader( textureBrowser, shader->getName() ); TextureBrowser_textureSelected( shader->getName() ); @@ -1136,7 +1128,21 @@ void TextureBrowser_Tracking_MouseDown( TextureBrowser& textureBrowser ){ } void TextureBrowser_Selection_MouseDown( TextureBrowser& textureBrowser, guint32 flags, int pointx, int pointy ){ - SelectTexture( textureBrowser, pointx, textureBrowser.height - 1 - pointy, ( flags & GDK_SHIFT_MASK ) != 0 ); + SelectTexture( textureBrowser, pointx, textureBrowser.height - 1 - pointy, flags ); +} + +void TextureBrowser_Selection_MouseUp( TextureBrowser& textureBrowser, guint32 flags, int pointx, int pointy ){ + if ( ( flags & GDK_SHIFT_MASK ) != 0 ) { + IShader* shader = Texture_At( textureBrowser, pointx, textureBrowser.height - 1 - pointy ); + if ( shader != 0 ) { + if ( shader->IsDefault() ) { + globalOutputStream() << "ERROR: " << shader->getName() << " is not a shader, it's a texture.\n"; + } + else{ + ViewShader( shader->getShaderFileName(), shader->getName(), ( flags & GDK_CONTROL_MASK ) != 0 ); + } + } + } } /* @@ -1472,6 +1478,7 @@ void BuildStoreAvailableTags( ui::ListStore storeAvailable, gboolean TextureBrowser_button_press( ui::Widget widget, GdkEventButton* event, TextureBrowser* textureBrowser ){ if ( event->type == GDK_BUTTON_PRESS ) { + gtk_widget_grab_focus( widget ); if ( event->button == 3 ) { if ( GlobalTextureBrowser().m_tags ) { textureBrowser->m_rmbSelected = true; @@ -1537,6 +1544,9 @@ gboolean TextureBrowser_button_release( ui::Widget widget, GdkEventButton* event TextureBrowser_Tracking_MouseUp( *textureBrowser ); } } + if ( event->button == 1 ) { + TextureBrowser_Selection_MouseUp( *textureBrowser, event->state, static_cast( event->x ), static_cast( event->y ) ); + } } return FALSE; } @@ -1546,6 +1556,10 @@ gboolean TextureBrowser_motion( ui::Widget widget, GdkEventMotion *event, Textur } gboolean TextureBrowser_scroll( ui::Widget widget, GdkEventScroll* event, TextureBrowser* textureBrowser ){ + gtk_widget_grab_focus( widget ); + if( !gtk_window_is_active( textureBrowser->m_parent ) ) + gtk_window_present( textureBrowser->m_parent ); + if ( event->direction == GDK_SCROLL_UP ) { TextureBrowser_MouseWheel( *textureBrowser, true ); }