#include "wx/gtk/private.h"
#include "wx/timer.h"
#include "wx/settings.h"
+#include "wx/evtloop.h"
#include <glib.h>
#include <gdk/gdk.h>
// either TRUE or FALSE and an activate event will be sent during the next
// OnIdle() call and it is reset to -1: this value means that we shouldn't
// send any activate events at all
-static int g_sendActivateEvent = -1;
+static int g_sendActivateEvent = -1;
//-----------------------------------------------------------------------------
// "focus_in_event"
{
if (g_isIdle)
wxapp_install_idle_handler();
-
+
switch ( g_sendActivateEvent )
{
case -1:
g_activeFrame = win;
g_lastActiveFrame = g_activeFrame;
-
+
// wxPrintf( wxT("active: %s\n"), win->GetTitle().c_str() );
-
+
wxLogTrace(wxT("activate"), wxT("Activating frame %p (from focus_in)"), g_activeFrame);
- wxActivateEvent event(wxEVT_ACTIVATE, TRUE, g_activeFrame->GetId());
+ wxActivateEvent event(wxEVT_ACTIVATE, true, g_activeFrame->GetId());
event.SetEventObject(g_activeFrame);
g_activeFrame->GetEventHandler()->ProcessEvent(event);
//-----------------------------------------------------------------------------
extern "C" {
-static gint gtk_frame_focus_out_callback( GtkWidget *widget,
- GdkEventFocus *WXUNUSED(gdk_event),
+static gint gtk_frame_focus_out_callback( GtkWidget *widget,
+ GdkEventFocus *WXUNUSED(gdk_event),
wxTopLevelWindowGTK *win )
{
if (g_isIdle)
// wxActivateEvent, otherwise gtk_window_focus_in_callback() will reset
// g_sendActivateEvent to -1
g_sendActivateEvent = 0;
-
+
// wxASSERT_MSG( (g_activeFrame == win), wxT("TLW deactivatd although it wasn't active") );
-
+
// wxPrintf( wxT("inactive: %s\n"), win->GetTitle().c_str() );
if (g_activeFrame)
{
wxLogTrace(wxT("activate"), wxT("Activating frame %p (from focus_in)"), g_activeFrame);
- wxActivateEvent event(wxEVT_ACTIVATE, FALSE, g_activeFrame->GetId());
+ wxActivateEvent event(wxEVT_ACTIVATE, false, g_activeFrame->GetId());
event.SetEventObject(g_activeFrame);
g_activeFrame->GetEventHandler()->ProcessEvent(event);
g_activeFrame = NULL;
}
-
+
return FALSE;
}
}
GdkEvent * WXUNUSED(event),
wxTopLevelWindow *win )
{
- win->SetIconizeState(FALSE);
+ win->SetIconizeState(false);
}
}
void wxTopLevelWindowGTK::Init()
{
- m_sizeSet = FALSE;
+ m_sizeSet = false;
m_miniEdge = 0;
m_miniTitle = 0;
m_mainWidget = (GtkWidget*) NULL;
- m_insertInClientArea = TRUE;
- m_isIconized = FALSE;
- m_fsIsShowing = FALSE;
- m_themeEnabled = TRUE;
+ m_insertInClientArea = true;
+ m_isIconized = false;
+ m_fsIsShowing = false;
+ m_themeEnabled = true;
m_gdkDecor = m_gdkFunc = 0;
- m_grabbed = FALSE;
+ m_grabbed = false;
}
bool wxTopLevelWindowGTK::Create( wxWindow *parent,
wxTopLevelWindows.Append( this );
- m_needParent = FALSE;
+ m_needParent = false;
if (!PreCreation( parent, pos, size ) ||
!CreateBase( parent, id, pos, size, style, wxDefaultValidator, name ))
{
wxFAIL_MSG( wxT("wxTopLevelWindowGTK creation failed") );
- return FALSE;
+ return false;
}
m_title = title;
{
gtk_window_set_type_hint(GTK_WINDOW(m_widget),
GDK_WINDOW_TYPE_HINT_UTILITY);
-
+
// On some WMs, like KDE, a TOOL_WINDOW will still show
// on the taskbar, but on Gnome a TOOL_WINDOW will not.
- // For consistency between WMs and with Windows, we
+ // For consistency between WMs and with Windows, we
// should set the NO_TASKBAR flag which will apply
// the set_skip_taskbar_hint if it is available,
// ensuring no taskbar entry will appear.
wxWindow *topParent = wxGetTopLevelParent(m_parent);
if (topParent && (((GTK_IS_WINDOW(topParent->m_widget)) &&
- (GetExtraStyle() & wxTOPLEVEL_EX_DIALOG)) ||
- (style & wxFRAME_FLOAT_ON_PARENT)))
+ (GetExtraStyle() & wxTOPLEVEL_EX_DIALOG)) ||
+ (style & wxFRAME_FLOAT_ON_PARENT)))
{
gtk_window_set_transient_for( GTK_WINDOW(m_widget),
GTK_WINDOW(topParent->m_widget) );
}
#endif
- if (!name.IsEmpty())
+ if (!name.empty())
gtk_window_set_wmclass( GTK_WINDOW(m_widget), wxGTK_CONV( name ), wxGTK_CONV( name ) );
gtk_window_set_title( GTK_WINDOW(m_widget), wxGTK_CONV( title ) );
GTK_SIGNAL_FUNC(gtk_frame_focus_in_callback), (gpointer)this );
gtk_signal_connect( GTK_OBJECT(m_widget), "focus_out_event",
GTK_SIGNAL_FUNC(gtk_frame_focus_out_callback), (gpointer)this );
-
+
// decorations
if ((m_miniEdge > 0) || (style & wxSIMPLE_BORDER) || (style & wxNO_BORDER))
{
}
}
- return TRUE;
+ return true;
}
wxTopLevelWindowGTK::~wxTopLevelWindowGTK()
RemoveGrab();
}
- m_isBeingDeleted = TRUE;
+ m_isBeingDeleted = true;
// it may also be GtkScrolledWindow in the case of an MDI child
if (GTK_IS_WINDOW(m_widget))
{
gtk_window_set_focus( GTK_WINDOW(m_widget), NULL );
}
-
+
if (g_activeFrame == this)
g_activeFrame = NULL;
if (g_lastActiveFrame == this)
bool wxTopLevelWindowGTK::ShowFullScreen(bool show, long style )
{
if (show == m_fsIsShowing)
- return FALSE; // return what?
+ return false; // return what?
m_fsIsShowing = show;
-
+
wxX11FullScreenMethod method =
wxGetFullScreenMethodX11((WXDisplay*)GDK_DISPLAY(),
(WXWindow)GDK_ROOT_WINDOW());
// to switch to fullscreen, which is not always available. We must
// check if WM supports the spec and use legacy methods if it
// doesn't.
- if (method == wxX11_FS_WMSPEC)
+ if ( (method == wxX11_FS_WMSPEC) && !gtk_check_version(2,2,0) )
{
if (show)
gtk_window_fullscreen( GTK_WINDOW( m_widget ) );
else
gtk_window_unfullscreen( GTK_WINDOW( m_widget ) );
- return TRUE;
+ return true;
}
else
#endif // GTK+ >= 2.2.0
}
}
- return TRUE;
+ return true;
}
// ----------------------------------------------------------------------------
GtkOnSize( m_x, m_y, m_width, m_height );
}
-
+
if (show)
gtk_widget_set_uposition( m_widget, m_x, m_y );
-
+
return wxWindow::Show( show );
}
// avoid recursions
if (m_resizing)
return;
- m_resizing = TRUE;
+ m_resizing = true;
int old_x = m_x;
int old_y = m_y;
maxWidth = -1;
maxHeight = -1;
#endif
-
+
if ((minWidth != -1) && (m_width < minWidth)) m_width = minWidth;
if ((minHeight != -1) && (m_height < minHeight)) m_height = minHeight;
if ((maxWidth != -1) && (m_width > maxWidth)) m_width = maxWidth;
/* we set the size in GtkOnSize, i.e. mostly the actual resizing is
done either directly before the frame is shown or in idle time
so that different calls to SetSize() don't lead to flicker. */
- m_sizeSet = FALSE;
+ m_sizeSet = false;
}
- m_resizing = FALSE;
+ m_resizing = false;
}
void wxTopLevelWindowGTK::DoGetClientSize( int *width, int *height ) const
// avoid recursions
if (m_resizing) return;
- m_resizing = TRUE;
+ m_resizing = true;
if ( m_wxwindow == NULL ) return;
maxWidth = -1;
maxHeight = -1;
#endif
-
+
if ((minWidth != -1) && (m_width < minWidth)) m_width = minWidth;
if ((minHeight != -1) && (m_height < minHeight)) m_height = minHeight;
if ((maxWidth != -1) && (m_width > maxWidth)) m_width = maxWidth;
// is no need to set the size or position of m_wxwindow.
}
- m_sizeSet = TRUE;
+ m_sizeSet = true;
// send size event to frame
wxSizeEvent event( wxSize(m_width,m_height), GetId() );
event.SetEventObject( this );
GetEventHandler()->ProcessEvent( event );
- m_resizing = FALSE;
+ m_resizing = false;
}
void wxTopLevelWindowGTK::OnInternalIdle()
}
wxWindow::OnInternalIdle();
-
+
// Synthetize activate events.
if ( g_sendActivateEvent != -1 )
{
bool activate = g_sendActivateEvent != 0;
-
+
// if (!activate) wxPrintf( wxT("de") );
// wxPrintf( wxT("activate\n") );
-
+
// do it only once
g_sendActivateEvent = -1;
}
gtk_window_set_icon_list(GTK_WINDOW(m_widget), list);
g_list_free(list);
-
+
#else // !__WXGTK20__
GdkWindow* window = m_widget->window;
if (!window)
// wxFAIL_MSG( _T("not implemented") );
// This is an approximation
- return FALSE;
+ return false;
#endif
}
{
if (!m_grabbed)
{
- m_grabbed = TRUE;
+ m_grabbed = true;
gtk_grab_add( m_widget );
- gtk_main();
+ wxEventLoop().Run();
gtk_grab_remove( m_widget );
}
}
if (m_grabbed)
{
gtk_main_quit();
- m_grabbed = FALSE;
+ m_grabbed = false;
}
}
else
{
#ifdef __WXGTK20__
- gdk_window_shape_combine_region(window, region.GetRegion(), 0, 0);
+ gdk_window_shape_combine_region(window, region.GetRegion(), 0, 0);
#else
- wxBitmap bmp = region.ConvertToBitmap();
- bmp.SetMask(new wxMask(bmp, *wxBLACK));
- GdkBitmap* mask = bmp.GetMask()->GetBitmap();
- gdk_window_shape_combine_mask(window, mask, 0, 0);
+ wxBitmap bmp = region.ConvertToBitmap();
+ bmp.SetMask(new wxMask(bmp, *wxBLACK));
+ GdkBitmap* mask = bmp.GetMask()->GetBitmap();
+ gdk_window_shape_combine_mask(window, mask, 0, 0);
#endif
- return TRUE;
+ return true;
}
}
- return FALSE;
+ return false;
}
bool wxTopLevelWindowGTK::SetShape(const wxRegion& region)
{
- wxCHECK_MSG( HasFlag(wxFRAME_SHAPED), FALSE,
+ wxCHECK_MSG( HasFlag(wxFRAME_SHAPED), false,
_T("Shaped windows must be created with the wxFRAME_SHAPED style."));
GdkWindow *window = NULL;
{
return (this == (wxTopLevelWindowGTK*)g_activeFrame);
}
-