diff options
Diffstat (limited to 'src/interface-gtk/interface.c')
-rw-r--r-- | src/interface-gtk/interface.c | 95 |
1 files changed, 0 insertions, 95 deletions
diff --git a/src/interface-gtk/interface.c b/src/interface-gtk/interface.c index 9515ffc..7f58c45 100644 --- a/src/interface-gtk/interface.c +++ b/src/interface-gtk/interface.c @@ -103,101 +103,6 @@ teco_bgr2rgb(guint32 bgr) return GUINT32_SWAP_LE_BE(bgr) >> 8; } -struct _TecoView { - ScintillaObject parent_instance; - /** current size allocation */ - GdkRectangle allocation; -}; - -G_DEFINE_AUTOPTR_CLEANUP_FUNC(ScintillaObject, g_object_unref); - -#define TECO_TYPE_VIEW teco_view_get_type() -G_DECLARE_FINAL_TYPE(TecoView, teco_view, TECO, VIEW, ScintillaObject) - -G_DEFINE_TYPE(TecoView, teco_view, SCINTILLA_TYPE_OBJECT) - -static void -teco_view_scintilla_notify_cb(ScintillaObject *sci, gint iMessage, SCNotification *notify) -{ - teco_view_process_notify((teco_view_t *)TECO_VIEW(sci), notify); -} - -/** - * Called when the view is size allocated. - * - * This especially ensures that the caret is visible after startup and when - * opening files on specific lines. - * It's important to scroll the caret only when the size actually changes, - * so we do not interfere with mouse scrolling. - * That callback is invoked even if the size does not change, so that's why - * we have to store the current allocation in teco_view_t. - * Calling it once is unfortunately not sufficient since the window size - * can change during startup. - */ -static void -teco_view_size_allocate_cb(GtkWidget *widget, GdkRectangle *allocation) -{ - /* chain to parent class */ - GTK_WIDGET_CLASS(teco_view_parent_class)->size_allocate(widget, allocation); - - TecoView *view = TECO_VIEW(widget); - - if (allocation->width == view->allocation.width && allocation->height == view->allocation.height) - return; - teco_view_ssm((teco_view_t *)view, SCI_SCROLLCARET, 0, 0); - memcpy(&view->allocation, allocation, sizeof(view->allocation)); -} - -teco_view_t * -teco_view_new(void) -{ - TecoView *ctx = TECO_VIEW(g_object_new(TECO_TYPE_VIEW, NULL)); - /* - * We don't want the object to be destroyed - * when it is removed from the vbox. - */ - g_object_ref_sink(ctx); - - scintilla_set_id(SCINTILLA(ctx), 0); - - gtk_widget_set_size_request(GTK_WIDGET(ctx), 500, 300); - - /* - * This disables mouse and key events on this view. - * For some strange reason, masking events on - * the event box does NOT work. - */ - gtk_widget_set_can_focus(GTK_WIDGET(ctx), FALSE); - gint events = gtk_widget_get_events(GTK_WIDGET(ctx)); - events &= ~(GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | - GDK_SCROLL_MASK | - GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK); - gtk_widget_set_events(GTK_WIDGET(ctx), events); - - return (teco_view_t *)ctx; -} - -static void -teco_view_class_init(TecoViewClass *klass) -{ - SCINTILLA_CLASS(klass)->notify = teco_view_scintilla_notify_cb; - GTK_WIDGET_CLASS(klass)->size_allocate = teco_view_size_allocate_cb; -} - -static void teco_view_init(TecoView *self) {} - -sptr_t -teco_view_ssm(teco_view_t *ctx, unsigned int iMessage, uptr_t wParam, sptr_t lParam) -{ - return scintilla_send_message(SCINTILLA(ctx), iMessage, wParam, lParam); -} - -void -teco_view_free(teco_view_t *ctx) -{ - g_object_unref(ctx); -} - static struct { GtkCssProvider *css_var_provider; |