aboutsummaryrefslogtreecommitdiffhomepage
path: root/gtk/ScintillaGTK.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/ScintillaGTK.cxx')
-rw-r--r--gtk/ScintillaGTK.cxx376
1 files changed, 88 insertions, 288 deletions
diff --git a/gtk/ScintillaGTK.cxx b/gtk/ScintillaGTK.cxx
index 33aec818b..2d5daa2f0 100644
--- a/gtk/ScintillaGTK.cxx
+++ b/gtk/ScintillaGTK.cxx
@@ -72,7 +72,9 @@
#include "ExternalLexer.h"
#endif
+#include "ScintillaGTK.h"
#include "scintilla-marshal.h"
+#include "ScintillaGTKAccessible.h"
#include "Converter.h"
@@ -105,8 +107,6 @@ static GdkWindow *WindowFromWidget(GtkWidget *w) {
#pragma warning(disable: 4505)
#endif
-#define OBJECT_CLASS GObjectClass
-
#ifdef SCI_NAMESPACE
using namespace Scintilla;
#endif
@@ -118,228 +118,6 @@ static GdkWindow *PWindow(const Window &w) {
extern std::string UTF8FromLatin1(const char *s, int len);
-class ScintillaGTK : public ScintillaBase {
- _ScintillaObject *sci;
- Window wText;
- Window scrollbarv;
- Window scrollbarh;
- GtkAdjustment *adjustmentv;
- GtkAdjustment *adjustmenth;
- int verticalScrollBarWidth;
- int horizontalScrollBarHeight;
-
- SelectionText primary;
-
- GdkEventButton *evbtn;
- bool capturedMouse;
- bool dragWasDropped;
- int lastKey;
- int rectangularSelectionModifier;
-
- GtkWidgetClass *parentClass;
-
- static GdkAtom atomClipboard;
- static GdkAtom atomUTF8;
- static GdkAtom atomString;
- static GdkAtom atomUriList;
- static GdkAtom atomDROPFILES_DND;
- GdkAtom atomSought;
-
-#if PLAT_GTK_WIN32
- CLIPFORMAT cfColumnSelect;
-#endif
-
- Window wPreedit;
- Window wPreeditDraw;
- GtkIMContext *im_context;
- PangoScript lastNonCommonScript;
-
- // Wheel mouse support
- unsigned int linesPerScroll;
- GTimeVal lastWheelMouseTime;
- gint lastWheelMouseDirection;
- gint wheelMouseIntensity;
-
-#if GTK_CHECK_VERSION(3,0,0)
- cairo_rectangle_list_t *rgnUpdate;
-#else
- GdkRegion *rgnUpdate;
-#endif
- bool repaintFullWindow;
-
- guint styleIdleID;
-
- // Private so ScintillaGTK objects can not be copied
- ScintillaGTK(const ScintillaGTK &);
- ScintillaGTK &operator=(const ScintillaGTK &);
-
-public:
- explicit ScintillaGTK(_ScintillaObject *sci_);
- virtual ~ScintillaGTK();
- static void ClassInit(OBJECT_CLASS* object_class, GtkWidgetClass *widget_class, GtkContainerClass *container_class);
-private:
- virtual void Initialise();
- virtual void Finalise();
- virtual bool AbandonPaint();
- virtual void DisplayCursor(Window::Cursor c);
- virtual bool DragThreshold(Point ptStart, Point ptNow);
- virtual void StartDrag();
- int TargetAsUTF8(char *text);
- int EncodedFromUTF8(char *utf8, char *encoded) const;
- virtual bool ValidCodePage(int codePage) const;
-public: // Public for scintilla_send_message
- virtual sptr_t WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam);
-private:
- virtual sptr_t DefWndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam);
- struct TimeThunk {
- TickReason reason;
- ScintillaGTK *scintilla;
- guint timer;
- TimeThunk() : reason(tickCaret), scintilla(NULL), timer(0) {}
- };
- TimeThunk timers[tickDwell+1];
- virtual bool FineTickerAvailable();
- virtual bool FineTickerRunning(TickReason reason);
- virtual void FineTickerStart(TickReason reason, int millis, int tolerance);
- virtual void FineTickerCancel(TickReason reason);
- virtual bool SetIdle(bool on);
- virtual void SetMouseCapture(bool on);
- virtual bool HaveMouseCapture();
- virtual bool PaintContains(PRectangle rc);
- void FullPaint();
- virtual PRectangle GetClientRectangle() const;
- virtual void ScrollText(int linesToMove);
- virtual void SetVerticalScrollPos();
- virtual void SetHorizontalScrollPos();
- virtual bool ModifyScrollBars(int nMax, int nPage);
- void ReconfigureScrollBars();
- virtual void NotifyChange();
- virtual void NotifyFocus(bool focus);
- virtual void NotifyParent(SCNotification scn);
- void NotifyKey(int key, int modifiers);
- void NotifyURIDropped(const char *list);
- const char *CharacterSetID() const;
- virtual CaseFolder *CaseFolderForEncoding();
- virtual std::string CaseMapString(const std::string &s, int caseMapping);
- virtual int KeyDefault(int key, int modifiers);
- virtual void CopyToClipboard(const SelectionText &selectedText);
- virtual void Copy();
- virtual void Paste();
- virtual void CreateCallTipWindow(PRectangle rc);
- virtual void AddToPopUp(const char *label, int cmd = 0, bool enabled = true);
- bool OwnPrimarySelection();
- virtual void ClaimSelection();
- void GetGtkSelectionText(GtkSelectionData *selectionData, SelectionText &selText);
- void ReceivedSelection(GtkSelectionData *selection_data);
- void ReceivedDrop(GtkSelectionData *selection_data);
- static void GetSelection(GtkSelectionData *selection_data, guint info, SelectionText *selected);
- void StoreOnClipboard(SelectionText *clipText);
- static void ClipboardGetSelection(GtkClipboard* clip, GtkSelectionData *selection_data, guint info, void *data);
- static void ClipboardClearSelection(GtkClipboard* clip, void *data);
-
- void UnclaimSelection(GdkEventSelection *selection_event);
- void Resize(int width, int height);
-
- // Callback functions
- void RealizeThis(GtkWidget *widget);
- static void Realize(GtkWidget *widget);
- void UnRealizeThis(GtkWidget *widget);
- static void UnRealize(GtkWidget *widget);
- void MapThis();
- static void Map(GtkWidget *widget);
- void UnMapThis();
- static void UnMap(GtkWidget *widget);
- gint FocusInThis(GtkWidget *widget);
- static gint FocusIn(GtkWidget *widget, GdkEventFocus *event);
- gint FocusOutThis(GtkWidget *widget);
- static gint FocusOut(GtkWidget *widget, GdkEventFocus *event);
- static void SizeRequest(GtkWidget *widget, GtkRequisition *requisition);
-#if GTK_CHECK_VERSION(3,0,0)
- static void GetPreferredWidth(GtkWidget *widget, gint *minimalWidth, gint *naturalWidth);
- static void GetPreferredHeight(GtkWidget *widget, gint *minimalHeight, gint *naturalHeight);
-#endif
- static void SizeAllocate(GtkWidget *widget, GtkAllocation *allocation);
-#if GTK_CHECK_VERSION(3,0,0)
- gboolean DrawTextThis(cairo_t *cr);
- static gboolean DrawText(GtkWidget *widget, cairo_t *cr, ScintillaGTK *sciThis);
- gboolean DrawThis(cairo_t *cr);
- static gboolean DrawMain(GtkWidget *widget, cairo_t *cr);
-#else
- gboolean ExposeTextThis(GtkWidget *widget, GdkEventExpose *ose);
- static gboolean ExposeText(GtkWidget *widget, GdkEventExpose *ose, ScintillaGTK *sciThis);
- gboolean Expose(GtkWidget *widget, GdkEventExpose *ose);
- static gboolean ExposeMain(GtkWidget *widget, GdkEventExpose *ose);
-#endif
- void ForAll(GtkCallback callback, gpointer callback_data);
- static void MainForAll(GtkContainer *container, gboolean include_internals, GtkCallback callback, gpointer callback_data);
-
- static void ScrollSignal(GtkAdjustment *adj, ScintillaGTK *sciThis);
- static void ScrollHSignal(GtkAdjustment *adj, ScintillaGTK *sciThis);
- gint PressThis(GdkEventButton *event);
- static gint Press(GtkWidget *widget, GdkEventButton *event);
- static gint MouseRelease(GtkWidget *widget, GdkEventButton *event);
- static gint ScrollEvent(GtkWidget *widget, GdkEventScroll *event);
- static gint Motion(GtkWidget *widget, GdkEventMotion *event);
- gboolean KeyThis(GdkEventKey *event);
- static gboolean KeyPress(GtkWidget *widget, GdkEventKey *event);
- static gboolean KeyRelease(GtkWidget *widget, GdkEventKey *event);
-#if GTK_CHECK_VERSION(3,0,0)
- gboolean DrawPreeditThis(GtkWidget *widget, cairo_t *cr);
- static gboolean DrawPreedit(GtkWidget *widget, cairo_t *cr, ScintillaGTK *sciThis);
-#else
- gboolean ExposePreeditThis(GtkWidget *widget, GdkEventExpose *ose);
- static gboolean ExposePreedit(GtkWidget *widget, GdkEventExpose *ose, ScintillaGTK *sciThis);
-#endif
-
- bool KoreanIME();
- void CommitThis(char *str);
- static void Commit(GtkIMContext *context, char *str, ScintillaGTK *sciThis);
- void PreeditChangedInlineThis();
- void PreeditChangedWindowedThis();
- static void PreeditChanged(GtkIMContext *context, ScintillaGTK *sciThis);
- void MoveImeCarets(int pos);
- void DrawImeIndicator(int indicator, int len);
- void SetCandidateWindowPos();
-
- static void StyleSetText(GtkWidget *widget, GtkStyle *previous, void*);
- static void RealizeText(GtkWidget *widget, void*);
- static void Dispose(GObject *object);
- static void Destroy(GObject *object);
- static void SelectionReceived(GtkWidget *widget, GtkSelectionData *selection_data,
- guint time);
- static void SelectionGet(GtkWidget *widget, GtkSelectionData *selection_data,
- guint info, guint time);
- static gint SelectionClear(GtkWidget *widget, GdkEventSelection *selection_event);
- gboolean DragMotionThis(GdkDragContext *context, gint x, gint y, guint dragtime);
- static gboolean DragMotion(GtkWidget *widget, GdkDragContext *context,
- gint x, gint y, guint dragtime);
- static void DragLeave(GtkWidget *widget, GdkDragContext *context,
- guint time);
- static void DragEnd(GtkWidget *widget, GdkDragContext *context);
- static gboolean Drop(GtkWidget *widget, GdkDragContext *context,
- gint x, gint y, guint time);
- static void DragDataReceived(GtkWidget *widget, GdkDragContext *context,
- gint x, gint y, GtkSelectionData *selection_data, guint info, guint time);
- static void DragDataGet(GtkWidget *widget, GdkDragContext *context,
- GtkSelectionData *selection_data, guint info, guint time);
- static gboolean TimeOut(gpointer ptt);
- static gboolean IdleCallback(gpointer pSci);
- static gboolean StyleIdle(gpointer pSci);
- virtual void IdleWork();
- virtual void QueueIdleWork(WorkNeeded::workItems items, int upTo);
- static void PopUpCB(GtkMenuItem *menuItem, ScintillaGTK *sciThis);
-
-#if GTK_CHECK_VERSION(3,0,0)
- static gboolean DrawCT(GtkWidget *widget, cairo_t *cr, CallTip *ctip);
-#else
- static gboolean ExposeCT(GtkWidget *widget, GdkEventExpose *ose, CallTip *ct);
-#endif
- static gboolean PressCT(GtkWidget *widget, GdkEventButton *event, ScintillaGTK *sciThis);
-
- static sptr_t DirectFunction(sptr_t ptr,
- unsigned int iMessage, uptr_t wParam, sptr_t lParam);
-};
-
enum {
COMMAND_SIGNAL,
NOTIFY_SIGNAL,
@@ -379,7 +157,7 @@ static GtkWidget *PWidget(Window &w) {
return static_cast<GtkWidget *>(w.GetID());
}
-static ScintillaGTK *ScintillaFromWidget(GtkWidget *widget) {
+ScintillaGTK *ScintillaGTK::FromWidget(GtkWidget *widget) {
ScintillaObject *scio = SCINTILLA(widget);
return static_cast<ScintillaGTK *>(scio->pscin);
}
@@ -394,7 +172,8 @@ ScintillaGTK::ScintillaGTK(_ScintillaObject *sci_) :
wheelMouseIntensity(0),
rgnUpdate(0),
repaintFullWindow(false),
- styleIdleID(0) {
+ styleIdleID(0),
+ accessible(0) {
sci = sci_;
wMain = GTK_WIDGET(sci);
@@ -527,7 +306,7 @@ void ScintillaGTK::RealizeThis(GtkWidget *widget) {
}
void ScintillaGTK::Realize(GtkWidget *widget) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
+ ScintillaGTK *sciThis = FromWidget(widget);
sciThis->RealizeThis(widget);
}
@@ -560,7 +339,7 @@ void ScintillaGTK::UnRealizeThis(GtkWidget *widget) {
}
void ScintillaGTK::UnRealize(GtkWidget *widget) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
+ ScintillaGTK *sciThis = FromWidget(widget);
sciThis->UnRealizeThis(widget);
}
@@ -594,7 +373,7 @@ void ScintillaGTK::MapThis() {
}
void ScintillaGTK::Map(GtkWidget *widget) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
+ ScintillaGTK *sciThis = FromWidget(widget);
sciThis->MapThis();
}
@@ -617,7 +396,7 @@ void ScintillaGTK::UnMapThis() {
}
void ScintillaGTK::UnMap(GtkWidget *widget) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
+ ScintillaGTK *sciThis = FromWidget(widget);
sciThis->UnMapThis();
}
@@ -634,7 +413,7 @@ void ScintillaGTK::ForAll(GtkCallback callback, gpointer callback_data) {
}
void ScintillaGTK::MainForAll(GtkContainer *container, gboolean include_internals, GtkCallback callback, gpointer callback_data) {
- ScintillaGTK *sciThis = ScintillaFromWidget((GtkWidget *)container);
+ ScintillaGTK *sciThis = FromWidget((GtkWidget *)container);
if (callback != NULL && include_internals) {
sciThis->ForAll(callback, callback_data);
@@ -690,7 +469,7 @@ gint ScintillaGTK::FocusInThis(GtkWidget *widget) {
}
gint ScintillaGTK::FocusIn(GtkWidget *widget, GdkEventFocus * /*event*/) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
+ ScintillaGTK *sciThis = FromWidget(widget);
return sciThis->FocusInThis(widget);
}
@@ -710,12 +489,12 @@ gint ScintillaGTK::FocusOutThis(GtkWidget *widget) {
}
gint ScintillaGTK::FocusOut(GtkWidget *widget, GdkEventFocus * /*event*/) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
+ ScintillaGTK *sciThis = FromWidget(widget);
return sciThis->FocusOutThis(widget);
}
void ScintillaGTK::SizeRequest(GtkWidget *widget, GtkRequisition *requisition) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
+ ScintillaGTK *sciThis = FromWidget(widget);
requisition->width = 1;
requisition->height = 1;
GtkRequisition child_requisition;
@@ -745,7 +524,7 @@ void ScintillaGTK::GetPreferredHeight(GtkWidget *widget, gint *minimalHeight, gi
#endif
void ScintillaGTK::SizeAllocate(GtkWidget *widget, GtkAllocation *allocation) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
+ ScintillaGTK *sciThis = FromWidget(widget);
try {
gtk_widget_set_allocation(widget, allocation);
if (IS_WIDGET_REALIZED(widget))
@@ -882,6 +661,12 @@ void ScintillaGTK::Finalise() {
for (TickReason tr = tickCaret; tr <= tickDwell; tr = static_cast<TickReason>(tr + 1)) {
FineTickerCancel(tr);
}
+ if (accessible) {
+ gtk_accessible_set_widget(GTK_ACCESSIBLE(accessible), NULL);
+ g_object_unref(accessible);
+ accessible = 0;
+ }
+
ScintillaBase::Finalise();
}
@@ -925,8 +710,11 @@ void ScintillaGTK::StartDrag() {
#endif
}
-static std::string ConvertText(const char *s, size_t len, const char *charSetDest,
- const char *charSetSource, bool transliterations, bool silent=false) {
+#ifdef SCI_NAMESPACE
+namespace Scintilla {
+#endif
+std::string ConvertText(const char *s, size_t len, const char *charSetDest,
+ const char *charSetSource, bool transliterations, bool silent) {
// s is not const because of different versions of iconv disagreeing about const
std::string destForm;
Converter conv(charSetDest, charSetSource, transliterations);
@@ -957,6 +745,9 @@ static std::string ConvertText(const char *s, size_t len, const char *charSetDes
}
return destForm;
}
+#ifdef SCI_NAMESPACE
+}
+#endif
// Returns the target converted to UTF8.
// Return the length in bytes.
@@ -1057,6 +848,17 @@ sptr_t ScintillaGTK::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam
case SCI_GETRECTANGULARSELECTIONMODIFIER:
return rectangularSelectionModifier;
+ case SCI_SETREADONLY: {
+ sptr_t ret = ScintillaBase::WndProc(iMessage, wParam, lParam);
+ if (accessible) {
+ ScintillaGTKAccessible *sciAccessible = ScintillaGTKAccessible::FromAccessible(accessible);
+ if (sciAccessible) {
+ sciAccessible->NotifyReadOnly();
+ }
+ }
+ return ret;
+ }
+
default:
return ScintillaBase::WndProc(iMessage, wParam, lParam);
}
@@ -1450,40 +1252,6 @@ void ScintillaGTK::Copy() {
}
}
-// helper class to watch a GObject lifetime and get notified when it dies
-class GObjectWatcher {
- GObject *weakRef;
-
- void WeakNotifyThis(GObject *obj) {
- PLATFORM_ASSERT(obj == weakRef);
-
- Destroyed();
- weakRef = 0;
- }
-
- static void WeakNotify(gpointer data, GObject *obj) {
- static_cast<GObjectWatcher*>(data)->WeakNotifyThis(obj);
- }
-
-public:
- GObjectWatcher(GObject *obj) :
- weakRef(obj) {
- g_object_weak_ref(weakRef, WeakNotify, this);
- }
-
- virtual ~GObjectWatcher() {
- if (weakRef) {
- g_object_weak_unref(weakRef, WeakNotify, this);
- }
- }
-
- virtual void Destroyed() {}
-
- bool IsDestroyed() {
- return weakRef != 0;
- }
-};
-
void ScintillaGTK::Paste() {
atomSought = atomUTF8;
GtkClipboard *clipBoard =
@@ -1968,12 +1736,12 @@ gint ScintillaGTK::PressThis(GdkEventButton *event) {
gint ScintillaGTK::Press(GtkWidget *widget, GdkEventButton *event) {
if (event->window != WindowFromWidget(widget))
return FALSE;
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
+ ScintillaGTK *sciThis = FromWidget(widget);
return sciThis->PressThis(event);
}
gint ScintillaGTK::MouseRelease(GtkWidget *widget, GdkEventButton *event) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
+ ScintillaGTK *sciThis = FromWidget(widget);
try {
//Platform::DebugPrintf("Release %x %d %d\n",sciThis,event->time,event->state);
if (!sciThis->HaveMouseCapture())
@@ -1999,7 +1767,7 @@ gint ScintillaGTK::MouseRelease(GtkWidget *widget, GdkEventButton *event) {
// win32gtk and GTK >= 2 use SCROLL_* events instead of passing the
// button4/5/6/7 events to the GTK app
gint ScintillaGTK::ScrollEvent(GtkWidget *widget, GdkEventScroll *event) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
+ ScintillaGTK *sciThis = FromWidget(widget);
try {
if (widget == NULL || event == NULL)
@@ -2083,7 +1851,7 @@ gint ScintillaGTK::ScrollEvent(GtkWidget *widget, GdkEventScroll *event) {
}
gint ScintillaGTK::Motion(GtkWidget *widget, GdkEventMotion *event) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
+ ScintillaGTK *sciThis = FromWidget(widget);
try {
//Platform::DebugPrintf("Motion %x %d\n",sciThis,event->time);
if (event->window != WindowFromWidget(widget))
@@ -2314,13 +2082,13 @@ gboolean ScintillaGTK::KeyThis(GdkEventKey *event) {
}
gboolean ScintillaGTK::KeyPress(GtkWidget *widget, GdkEventKey *event) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
+ ScintillaGTK *sciThis = FromWidget(widget);
return sciThis->KeyThis(event);
}
gboolean ScintillaGTK::KeyRelease(GtkWidget *widget, GdkEventKey *event) {
//Platform::DebugPrintf("SC-keyrel: %d %x %3s\n",event->keyval, event->state, event->string);
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
+ ScintillaGTK *sciThis = FromWidget(widget);
if (gtk_im_context_filter_keypress(sciThis->im_context, event)) {
return TRUE;
}
@@ -2768,7 +2536,7 @@ gboolean ScintillaGTK::DrawThis(cairo_t *cr) {
}
gboolean ScintillaGTK::DrawMain(GtkWidget *widget, cairo_t *cr) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
+ ScintillaGTK *sciThis = FromWidget(widget);
return sciThis->DrawThis(cr);
}
@@ -2818,7 +2586,7 @@ gboolean ScintillaGTK::ExposeText(GtkWidget *widget, GdkEventExpose *ose, Scinti
}
gboolean ScintillaGTK::ExposeMain(GtkWidget *widget, GdkEventExpose *ose) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
+ ScintillaGTK *sciThis = FromWidget(widget);
//Platform::DebugPrintf("Expose Main %0d,%0d %0d,%0d\n",
//ose->area.x, ose->area.y, ose->area.width, ose->area.height);
return sciThis->Expose(widget, ose);
@@ -2861,14 +2629,14 @@ void ScintillaGTK::ScrollHSignal(GtkAdjustment *adj, ScintillaGTK *sciThis) {
void ScintillaGTK::SelectionReceived(GtkWidget *widget,
GtkSelectionData *selection_data, guint) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
+ ScintillaGTK *sciThis = FromWidget(widget);
//Platform::DebugPrintf("Selection received\n");
sciThis->ReceivedSelection(selection_data);
}
void ScintillaGTK::SelectionGet(GtkWidget *widget,
GtkSelectionData *selection_data, guint info, guint) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
+ ScintillaGTK *sciThis = FromWidget(widget);
try {
//Platform::DebugPrintf("Selection get\n");
if (SelectionOfGSD(selection_data) == GDK_SELECTION_PRIMARY) {
@@ -2883,7 +2651,7 @@ void ScintillaGTK::SelectionGet(GtkWidget *widget,
}
gint ScintillaGTK::SelectionClear(GtkWidget *widget, GdkEventSelection *selection_event) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
+ ScintillaGTK *sciThis = FromWidget(widget);
//Platform::DebugPrintf("Selection clear\n");
sciThis->UnclaimSelection(selection_event);
if (GTK_WIDGET_CLASS(sciThis->parentClass)->selection_clear_event) {
@@ -2922,12 +2690,12 @@ gboolean ScintillaGTK::DragMotionThis(GdkDragContext *context,
gboolean ScintillaGTK::DragMotion(GtkWidget *widget, GdkDragContext *context,
gint x, gint y, guint dragtime) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
+ ScintillaGTK *sciThis = FromWidget(widget);
return sciThis->DragMotionThis(context, x, y, dragtime);
}
void ScintillaGTK::DragLeave(GtkWidget *widget, GdkDragContext * /*context*/, guint) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
+ ScintillaGTK *sciThis = FromWidget(widget);
try {
sciThis->SetDragPosition(SelectionPosition(invalidPosition));
//Platform::DebugPrintf("DragLeave %x\n", sciThis);
@@ -2937,7 +2705,7 @@ void ScintillaGTK::DragLeave(GtkWidget *widget, GdkDragContext * /*context*/, gu
}
void ScintillaGTK::DragEnd(GtkWidget *widget, GdkDragContext * /*context*/) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
+ ScintillaGTK *sciThis = FromWidget(widget);
try {
// If drag did not result in drop here or elsewhere
if (!sciThis->dragWasDropped)
@@ -2952,7 +2720,7 @@ void ScintillaGTK::DragEnd(GtkWidget *widget, GdkDragContext * /*context*/) {
gboolean ScintillaGTK::Drop(GtkWidget *widget, GdkDragContext * /*context*/,
gint, gint, guint) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
+ ScintillaGTK *sciThis = FromWidget(widget);
try {
//Platform::DebugPrintf("Drop %x\n", sciThis);
sciThis->SetDragPosition(SelectionPosition(invalidPosition));
@@ -2964,7 +2732,7 @@ gboolean ScintillaGTK::Drop(GtkWidget *widget, GdkDragContext * /*context*/,
void ScintillaGTK::DragDataReceived(GtkWidget *widget, GdkDragContext * /*context*/,
gint, gint, GtkSelectionData *selection_data, guint /*info*/, guint) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
+ ScintillaGTK *sciThis = FromWidget(widget);
try {
sciThis->ReceivedDrop(selection_data);
sciThis->SetDragPosition(SelectionPosition(invalidPosition));
@@ -2975,7 +2743,7 @@ void ScintillaGTK::DragDataReceived(GtkWidget *widget, GdkDragContext * /*contex
void ScintillaGTK::DragDataGet(GtkWidget *widget, GdkDragContext *context,
GtkSelectionData *selection_data, guint info, guint) {
- ScintillaGTK *sciThis = ScintillaFromWidget(widget);
+ ScintillaGTK *sciThis = FromWidget(widget);
try {
sciThis->dragWasDropped = true;
if (!sciThis->sel.Empty()) {
@@ -3044,6 +2812,28 @@ void ScintillaGTK::QueueIdleWork(WorkNeeded::workItems items, int upTo) {
}
}
+void ScintillaGTK::SetDocPointer(Document *document) {
+ Document *oldDoc = 0;
+ ScintillaGTKAccessible *sciAccessible = 0;
+ if (accessible) {
+ sciAccessible = ScintillaGTKAccessible::FromAccessible(accessible);
+ if (sciAccessible && pdoc) {
+ oldDoc = pdoc;
+ oldDoc->AddRef();
+ }
+ }
+
+ Editor::SetDocPointer(document);
+
+ if (sciAccessible) {
+ // the accessible needs have the old Document, but also the new one active
+ sciAccessible->ChangeDocument(oldDoc, pdoc);
+ }
+ if (oldDoc) {
+ oldDoc->Release();
+ }
+}
+
void ScintillaGTK::PopUpCB(GtkMenuItem *menuItem, ScintillaGTK *sciThis) {
guint action = GPOINTER_TO_UINT(g_object_get_data(G_OBJECT(menuItem), "CmdNum"));
if (action) {
@@ -3109,6 +2899,14 @@ gboolean ScintillaGTK::ExposeCT(GtkWidget *widget, GdkEventExpose * /*ose*/, Cal
#endif
+AtkObject* ScintillaGTK::GetAccessibleThis(GtkWidget *widget) {
+ return ScintillaGTKAccessible::WidgetGetAccessibleImpl(widget, &accessible, scintilla_class_parent_class);
+}
+
+AtkObject* ScintillaGTK::GetAccessible(GtkWidget *widget) {
+ return FromWidget(widget)->GetAccessibleThis(widget);
+}
+
sptr_t ScintillaGTK::DirectFunction(
sptr_t ptr, unsigned int iMessage, uptr_t wParam, sptr_t lParam) {
return reinterpret_cast<ScintillaGTK *>(ptr)->WndProc(iMessage, wParam, lParam);
@@ -3217,6 +3015,8 @@ void ScintillaGTK::ClassInit(OBJECT_CLASS* object_class, GtkWidgetClass *widget_
widget_class->map = Map;
widget_class->unmap = UnMap;
+ widget_class->get_accessible = GetAccessible;
+
container_class->forall = MainForAll;
}