X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c7a49742ec6b4effe012dc7204db307e1267bf6a..bb996f289574defb0ae4339ae8e46ff3cf6fa54c:/src/gtk/textctrl.cpp?ds=sidebyside diff --git a/src/gtk/textctrl.cpp b/src/gtk/textctrl.cpp index 8a39558799..dda27477f3 100644 --- a/src/gtk/textctrl.cpp +++ b/src/gtk/textctrl.cpp @@ -30,7 +30,9 @@ #include #include +#include #include "wx/gtk/private.h" +#include "wx/gtk/private/gtk2-compat.h" // ---------------------------------------------------------------------------- // helpers @@ -167,25 +169,29 @@ static void wxGtkTextApplyTagsFromAttr(GtkWidget *text, GtkJustification align; switch (attr.GetAlignment()) { - default: - align = GTK_JUSTIFY_LEFT; - break; case wxTEXT_ALIGNMENT_RIGHT: align = GTK_JUSTIFY_RIGHT; break; case wxTEXT_ALIGNMENT_CENTER: align = GTK_JUSTIFY_CENTER; break; + case wxTEXT_ALIGNMENT_JUSTIFIED: +#ifdef __WXGTK3__ + align = GTK_JUSTIFY_FILL; + break; +#elif GTK_CHECK_VERSION(2,11,0) // gtk+ doesn't support justify before gtk+-2.11.0 with pango-1.17 being available // (but if new enough pango isn't available it's a mere gtk warning) -#if GTK_CHECK_VERSION(2,11,0) - case wxTEXT_ALIGNMENT_JUSTIFIED: if (!gtk_check_version(2,11,0)) + { align = GTK_JUSTIFY_FILL; - else - align = GTK_JUSTIFY_LEFT; - break; + break; + } + // fallthrough #endif + default: + align = GTK_JUSTIFY_LEFT; + break; } g_snprintf(buf, sizeof(buf), "WXALIGNMENT %d", align); @@ -403,7 +409,7 @@ au_check_word( GtkTextIter *s, GtkTextIter *e ) for( n = 0; n < WXSIZEOF(URIPrefixes); ++n ) { prefix_len = strlen(URIPrefixes[n]); - if((len > prefix_len) && !strncasecmp(text, URIPrefixes[n], prefix_len)) + if((len > prefix_len) && !wxStrnicmp(text, URIPrefixes[n], prefix_len)) break; } @@ -540,8 +546,6 @@ gtk_text_changed_callback( GtkWidget *WXUNUSED(widget), wxTextCtrl *win ) if ( win->IgnoreTextUpdate() ) return; - if (!win->m_hasVMT) return; - if ( win->MarkDirtyOnChange() ) win->MarkDirty(); @@ -549,48 +553,6 @@ gtk_text_changed_callback( GtkWidget *WXUNUSED(widget), wxTextCtrl *win ) } } -//----------------------------------------------------------------------------- -// clipboard events: "copy-clipboard", "cut-clipboard", "paste-clipboard" -//----------------------------------------------------------------------------- - -// common part of the event handlers below -static void -handle_text_clipboard_callback( GtkWidget *widget, wxTextCtrl *win, - wxEventType eventType, const gchar * signal_name) -{ - wxClipboardTextEvent event( eventType, win->GetId() ); - event.SetEventObject( win ); - if ( win->HandleWindowEvent( event ) ) - { - // don't let the default processing to take place if we did something - // ourselves in the event handler - g_signal_stop_emission_by_name (widget, signal_name); - } -} - -extern "C" { -static void -gtk_copy_clipboard_callback( GtkWidget *widget, wxTextCtrl *win ) -{ - handle_text_clipboard_callback( - widget, win, wxEVT_COMMAND_TEXT_COPY, "copy-clipboard" ); -} - -static void -gtk_cut_clipboard_callback( GtkWidget *widget, wxTextCtrl *win ) -{ - handle_text_clipboard_callback( - widget, win, wxEVT_COMMAND_TEXT_CUT, "cut-clipboard" ); -} - -static void -gtk_paste_clipboard_callback( GtkWidget *widget, wxTextCtrl *win ) -{ - handle_text_clipboard_callback( - widget, win, wxEVT_COMMAND_TEXT_PASTE, "paste-clipboard" ); -} -} - //----------------------------------------------------------------------------- // "mark_set" //----------------------------------------------------------------------------- @@ -643,12 +605,23 @@ void wxTextCtrl::Init() SetUpdateFont(false); m_text = NULL; + m_buffer = NULL; m_showPositionOnThaw = NULL; m_anonymousMarkList = NULL; } wxTextCtrl::~wxTextCtrl() { + if (m_text) + GTKDisconnect(m_text); + if (m_buffer) + GTKDisconnect(m_buffer); + + // this is also done by wxWindowGTK dtor, but has to be done here so our + // DoThaw() override is called + while (IsFrozen()) + Thaw(); + if (m_anonymousMarkList) g_slist_free(m_anonymousMarkList); } @@ -787,7 +760,7 @@ bool wxTextCtrl::Create( wxWindow *parent, GtkTextIter start, end; // We create our wxUrl tag here for slight efficiency gain - we - // don't have to check for the tag existance in callbacks, + // don't have to check for the tag existence in callbacks, // hereby it's guaranteed to exist. gtk_text_buffer_create_tag(m_buffer, "wxUrl", "foreground", "blue", @@ -823,12 +796,7 @@ bool wxTextCtrl::Create( wxWindow *parent, } - g_signal_connect (m_text, "copy-clipboard", - G_CALLBACK (gtk_copy_clipboard_callback), this); - g_signal_connect (m_text, "cut-clipboard", - G_CALLBACK (gtk_cut_clipboard_callback), this); - g_signal_connect (m_text, "paste-clipboard", - G_CALLBACK (gtk_paste_clipboard_callback), this); + GTKConnectClipboardSignals(m_text); m_cursor = wxCursor( wxCURSOR_IBEAM ); @@ -1599,7 +1567,7 @@ bool wxTextCtrl::IsEditable() const if ( IsMultiLine() ) { - return gtk_text_view_get_editable(GTK_TEXT_VIEW(m_text)); + return gtk_text_view_get_editable(GTK_TEXT_VIEW(m_text)) != 0; } else { @@ -1645,7 +1613,12 @@ GdkWindow *wxTextCtrl::GTKGetWindow(wxArrayGdkWindows& WXUNUSED(windows)) const } else { +#ifdef __WXGTK3__ + // no access to internal GdkWindows + return NULL; +#else return gtk_entry_get_text_window(GTK_ENTRY(m_text)); +#endif } } @@ -1792,7 +1765,7 @@ bool wxTextCtrl::GetStyle(long position, wxTextAttr& style) void wxTextCtrl::DoApplyWidgetStyle(GtkRcStyle *style) { - gtk_widget_modify_style(m_text, style); + GTKApplyStyle(m_text, style); } void wxTextCtrl::OnCut(wxCommandEvent& WXUNUSED(event)) @@ -1862,12 +1835,10 @@ void wxTextCtrl::DoFreeze() { wxCHECK_RET(m_text != NULL, wxT("invalid text ctrl")); - wxWindow::DoFreeze(); + GTKFreezeWidget(m_text); if ( HasFlag(wxTE_MULTILINE) ) { - GTKFreezeWidget(m_text); - // removing buffer dramatically speeds up insertion: g_object_ref(m_buffer); GtkTextBuffer* buf_new = gtk_text_buffer_new(NULL); @@ -1908,12 +1879,9 @@ void wxTextCtrl::DoThaw() GTK_TEXT_VIEW(m_text), m_showPositionOnThaw); m_showPositionOnThaw = NULL; } - - // and thaw the window - GTKThawWidget(m_text); } - wxWindow::DoThaw(); + GTKThawWidget(m_text); } // ---------------------------------------------------------------------------- @@ -1953,7 +1921,7 @@ void wxTextCtrl::OnUrlMouseEvent(wxMouseEvent& event) gtk_text_iter_forward_to_tag_toggle(&end, tag); // Native context menu is probably not desired on an URL. - // Consider making this dependant on ProcessEvent(wxTextUrlEvent) return value + // Consider making this dependent on ProcessEvent(wxTextUrlEvent) return value if(event.GetEventType() == wxEVT_RIGHT_DOWN) event.Skip(false);