]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtktextview.h
Create new PangoContexts and set them on the layout, to catch changes in
[~andy/gtk] / gtk / gtktextview.h
index f2a7cdfa5dc5e71d9dd72d36e447953a966dc1ec..90629353308052f05ec59d9e18a135895ae23078 100644 (file)
  * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
  */
 
-#ifndef GTK_TEXT_VIEW_H
-#define GTK_TEXT_VIEW_H
+#ifndef __GTK_TEXT_VIEW_H__
+#define __GTK_TEXT_VIEW_H__
 
 #include <gtk/gtkcontainer.h>
 #include <gtk/gtkimcontext.h>
 #include <gtk/gtktextbuffer.h>
+#include <gtk/gtkmenu.h>
 
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
+G_BEGIN_DECLS
 
 #define GTK_TYPE_TEXT_VIEW             (gtk_text_view_get_type ())
-#define GTK_TEXT_VIEW(obj)             (GTK_CHECK_CAST ((obj), GTK_TYPE_TEXT_VIEW, GtkTextView))
-#define GTK_TEXT_VIEW_CLASS(klass)     (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_TEXT_VIEW, GtkTextViewClass))
-#define GTK_IS_TEXT_VIEW(obj)          (GTK_CHECK_TYPE ((obj), GTK_TYPE_TEXT_VIEW))
-#define GTK_IS_TEXT_VIEW_CLASS(klass)  (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_TEXT_VIEW))
-#define GTK_TEXT_VIEW_GET_CLASS(obj)   (GTK_CHECK_GET_CLASS ((obj), GTK_TYPE_TEXT_VIEW, GtkTextViewClass))
+#define GTK_TEXT_VIEW(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_TEXT_VIEW, GtkTextView))
+#define GTK_TEXT_VIEW_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_TEXT_VIEW, GtkTextViewClass))
+#define GTK_IS_TEXT_VIEW(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_TEXT_VIEW))
+#define GTK_IS_TEXT_VIEW_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_TEXT_VIEW))
+#define GTK_TEXT_VIEW_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_TEXT_VIEW, GtkTextViewClass))
 
 typedef enum
 {
+  GTK_TEXT_WINDOW_PRIVATE,
   GTK_TEXT_WINDOW_WIDGET,
   GTK_TEXT_WINDOW_TEXT,
   GTK_TEXT_WINDOW_LEFT,
@@ -52,29 +52,55 @@ typedef enum
   GTK_TEXT_WINDOW_BOTTOM
 } GtkTextWindowType;
 
+#define GTK_TEXT_VIEW_PRIORITY_VALIDATE (GDK_PRIORITY_REDRAW + 5)
+
 typedef struct _GtkTextView GtkTextView;
 typedef struct _GtkTextViewClass GtkTextViewClass;
 
-/* Internal private type. */
+/* Internal private types. */
 typedef struct _GtkTextWindow GtkTextWindow;
+typedef struct _GtkTextPendingScroll GtkTextPendingScroll;
 
-struct _GtkTextView {
+struct _GtkTextView
+{
   GtkContainer parent_instance;
 
   struct _GtkTextLayout *layout;
   GtkTextBuffer *buffer;
 
   guint selection_drag_handler;
-  guint selection_drag_scan_timeout;
-  gint scrolling_accel_factor;
-
-  gboolean overwrite_mode;
-
-  GtkWrapMode wrap_mode;        /* Default wrap mode */
-
-  gboolean editable;            /* default editability */
+  guint scroll_timeout;
+
+  /* Default style settings */
+  gint pixels_above_lines;
+  gint pixels_below_lines;
+  gint pixels_inside_wrap;
+  GtkWrapMode wrap_mode;  
+  GtkJustification justify;
+  gint left_margin;
+  gint right_margin;
+  gint indent;
+  PangoTabArray *tabs;
+  guint editable : 1;
+
+  
+  
+  guint overwrite_mode : 1;
+  guint cursor_visible : 1;
+
+  /* if we have reset the IM since the last character entered */  
+  guint  need_im_reset : 1;    
+
+  guint accepts_tab : 1;
+  
+  guint width_changed : 1;
+  
+  /* debug flag - means that we've validated onscreen since the
+   * last "invalidate" signal from the layout
+   */
+  guint onscreen_validated : 1;
 
-  gboolean cursor_visible;
+  guint mouse_cursor_obscured : 1;
 
   GtkTextWindow *text_window;
   GtkTextWindow *left_window;
@@ -112,16 +138,29 @@ struct _GtkTextView {
   guint incremental_validate_idle;      /* Idle to revalidate offscreen portions, runs after redraw */
 
   GtkIMContext *im_context;
+  GtkWidget *popup_menu;
 
   gint drag_start_x;
   gint drag_start_y;
 
   GSList *children;
+
+  GtkTextPendingScroll *pending_scroll;
+
+  gint pending_place_cursor_button;
 };
 
-struct _GtkTextViewClass {
+struct _GtkTextViewClass
+{
   GtkContainerClass parent_class;
 
+  void (* set_scroll_adjustments)   (GtkTextView    *text_view,
+                                     GtkAdjustment  *hadjustment,
+                                     GtkAdjustment  *vadjustment);
+
+  void (* populate_popup)           (GtkTextView    *text_view,
+                                     GtkMenu        *menu);
+  
   /* These are all RUN_ACTION signals for keybindings */
 
   /* move insertion point */
@@ -129,6 +168,15 @@ struct _GtkTextViewClass {
                         GtkMovementStep step,
                         gint            count,
                         gboolean        extend_selection);
+
+  /* FIXME should be deprecated in favor of adding GTK_MOVEMENT_HORIZONTAL_PAGES
+   * or something in GTK 2.2, was put in to avoid adding enum values during
+   * the freeze.
+   */
+  void (* page_horizontally) (GtkTextView *text_view,
+                              gint         count,
+                              gboolean     extend_selection);
+  
   /* move the "anchor" (what Emacs calls the mark) to the cursor position */
   void (* set_anchor)  (GtkTextView    *text_view);
 
@@ -138,6 +186,7 @@ struct _GtkTextViewClass {
   void (* delete_from_cursor)    (GtkTextView  *text_view,
                                   GtkDeleteType type,
                                   gint          count);
+  void (* backspace)             (GtkTextView *text_view);
 
   /* cut copy paste */
   void (* cut_clipboard)   (GtkTextView *text_view);
@@ -145,34 +194,48 @@ struct _GtkTextViewClass {
   void (* paste_clipboard) (GtkTextView *text_view);
   /* overwrite */
   void (* toggle_overwrite) (GtkTextView *text_view);
-  void (* set_scroll_adjustments)   (GtkTextView    *text_view,
-                                     GtkAdjustment  *hadjustment,
-                                     GtkAdjustment  *vadjustment);
+
+  /* propagates to GtkWindow move_focus */
+  void (* move_focus)       (GtkTextView     *text_view,
+                             GtkDirectionType direction);  
+  
+  
+  /* Padding for future expansion */
+  void (*_gtk_reserved1) (void);
+  void (*_gtk_reserved2) (void);
+  void (*_gtk_reserved3) (void);
+  void (*_gtk_reserved4) (void);
+  void (*_gtk_reserved5) (void);
+  void (*_gtk_reserved6) (void);
+  void (*_gtk_reserved7) (void);
 };
 
-GtkType        gtk_text_view_get_type              (void) G_GNUC_CONST;
+GType          gtk_text_view_get_type              (void) G_GNUC_CONST;
 GtkWidget *    gtk_text_view_new                   (void);
 GtkWidget *    gtk_text_view_new_with_buffer       (GtkTextBuffer *buffer);
 void           gtk_text_view_set_buffer            (GtkTextView   *text_view,
                                                     GtkTextBuffer *buffer);
 GtkTextBuffer *gtk_text_view_get_buffer            (GtkTextView   *text_view);
-gboolean       gtk_text_view_scroll_to_mark        (GtkTextView   *text_view,
+gboolean       gtk_text_view_scroll_to_iter        (GtkTextView   *text_view,
+                                                    GtkTextIter   *iter,
+                                                    gdouble        within_margin,
+                                                    gboolean       use_align,
+                                                    gdouble        xalign,
+                                                    gdouble        yalign);
+void           gtk_text_view_scroll_to_mark        (GtkTextView   *text_view,
                                                     GtkTextMark   *mark,
-                                                    gint           mark_within_margin);
+                                                    gdouble        within_margin,
+                                                    gboolean       use_align,
+                                                    gdouble        xalign,
+                                                    gdouble        yalign);
+void           gtk_text_view_scroll_mark_onscreen  (GtkTextView   *text_view,
+                                                    GtkTextMark   *mark);
 gboolean       gtk_text_view_move_mark_onscreen    (GtkTextView   *text_view,
                                                     GtkTextMark   *mark);
 gboolean       gtk_text_view_place_cursor_onscreen (GtkTextView   *text_view);
 
 void           gtk_text_view_get_visible_rect      (GtkTextView   *text_view,
                                                     GdkRectangle  *visible_rect);
-void           gtk_text_view_set_wrap_mode         (GtkTextView   *text_view,
-                                                    GtkWrapMode    wrap_mode);
-GtkWrapMode    gtk_text_view_get_wrap_mode         (GtkTextView   *text_view);
-
-void           gtk_text_view_set_editable          (GtkTextView   *text_view,
-                                                    gboolean       setting);
-gboolean       gtk_text_view_get_editable          (GtkTextView   *text_view);
-
 void           gtk_text_view_set_cursor_visible    (GtkTextView   *text_view,
                                                     gboolean       setting);
 gboolean       gtk_text_view_get_cursor_visible    (GtkTextView   *text_view);
@@ -184,6 +247,11 @@ void           gtk_text_view_get_iter_at_location  (GtkTextView   *text_view,
                                                     GtkTextIter   *iter,
                                                     gint           x,
                                                     gint           y);
+void           gtk_text_view_get_iter_at_position  (GtkTextView   *text_view,
+                                                    GtkTextIter   *iter,
+                                                   gint          *trailing,
+                                                    gint           x,
+                                                    gint           y);
 void           gtk_text_view_get_line_yrange       (GtkTextView       *text_view,
                                                     const GtkTextIter *iter,
                                                     gint              *y,
@@ -215,10 +283,22 @@ GtkTextWindowType gtk_text_view_get_window_type (GtkTextView       *text_view,
 void gtk_text_view_set_border_window_size (GtkTextView       *text_view,
                                            GtkTextWindowType  type,
                                            gint               size);
-void gtk_text_view_set_text_window_size   (GtkTextView       *text_view,
-                                           gint               width,
-                                           gint               height);
-
+gint gtk_text_view_get_border_window_size (GtkTextView       *text_view,
+                                          GtkTextWindowType  type);
+
+gboolean gtk_text_view_forward_display_line           (GtkTextView       *text_view,
+                                                       GtkTextIter       *iter);
+gboolean gtk_text_view_backward_display_line          (GtkTextView       *text_view,
+                                                       GtkTextIter       *iter);
+gboolean gtk_text_view_forward_display_line_end       (GtkTextView       *text_view,
+                                                       GtkTextIter       *iter);
+gboolean gtk_text_view_backward_display_line_start    (GtkTextView       *text_view,
+                                                       GtkTextIter       *iter);
+gboolean gtk_text_view_starts_display_line            (GtkTextView       *text_view,
+                                                       const GtkTextIter *iter);
+gboolean gtk_text_view_move_visually                  (GtkTextView       *text_view,
+                                                       GtkTextIter       *iter,
+                                                       gint               count);
 
 /* Adding child widgets */
 void gtk_text_view_add_child_at_anchor (GtkTextView          *text_view,
@@ -238,8 +318,48 @@ void gtk_text_view_move_child          (GtkTextView          *text_view,
                                         gint                  xpos,
                                         gint                  ypos);
 
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* GTK_TEXT_VIEW_H */
+/* Default style settings (fallbacks if no tag affects the property) */
+
+void             gtk_text_view_set_wrap_mode          (GtkTextView      *text_view,
+                                                       GtkWrapMode       wrap_mode);
+GtkWrapMode      gtk_text_view_get_wrap_mode          (GtkTextView      *text_view);
+void             gtk_text_view_set_editable           (GtkTextView      *text_view,
+                                                       gboolean          setting);
+gboolean         gtk_text_view_get_editable           (GtkTextView      *text_view);
+void             gtk_text_view_set_overwrite          (GtkTextView      *text_view,
+                                                      gboolean          overwrite);
+gboolean         gtk_text_view_get_overwrite          (GtkTextView      *text_view);
+void            gtk_text_view_set_accepts_tab        (GtkTextView      *text_view,
+                                                      gboolean          accepts_tab);
+gboolean        gtk_text_view_get_accepts_tab        (GtkTextView      *text_view);
+void             gtk_text_view_set_pixels_above_lines (GtkTextView      *text_view,
+                                                       gint              pixels_above_lines);
+gint             gtk_text_view_get_pixels_above_lines (GtkTextView      *text_view);
+void             gtk_text_view_set_pixels_below_lines (GtkTextView      *text_view,
+                                                       gint              pixels_below_lines);
+gint             gtk_text_view_get_pixels_below_lines (GtkTextView      *text_view);
+void             gtk_text_view_set_pixels_inside_wrap (GtkTextView      *text_view,
+                                                       gint              pixels_inside_wrap);
+gint             gtk_text_view_get_pixels_inside_wrap (GtkTextView      *text_view);
+void             gtk_text_view_set_justification      (GtkTextView      *text_view,
+                                                       GtkJustification  justification);
+GtkJustification gtk_text_view_get_justification      (GtkTextView      *text_view);
+void             gtk_text_view_set_left_margin        (GtkTextView      *text_view,
+                                                       gint              left_margin);
+gint             gtk_text_view_get_left_margin        (GtkTextView      *text_view);
+void             gtk_text_view_set_right_margin       (GtkTextView      *text_view,
+                                                       gint              right_margin);
+gint             gtk_text_view_get_right_margin       (GtkTextView      *text_view);
+void             gtk_text_view_set_indent             (GtkTextView      *text_view,
+                                                       gint              indent);
+gint             gtk_text_view_get_indent             (GtkTextView      *text_view);
+void             gtk_text_view_set_tabs               (GtkTextView      *text_view,
+                                                       PangoTabArray    *tabs);
+PangoTabArray*   gtk_text_view_get_tabs               (GtkTextView      *text_view);
+
+/* note that the return value of this changes with the theme */
+GtkTextAttributes* gtk_text_view_get_default_attributes (GtkTextView    *text_view);
+
+G_END_DECLS
+
+#endif /* __GTK_TEXT_VIEW_H__ */