Re: is there a signal for typing at bottom of window?



Thanks Joël,

I don't see how your code reacts to scrolling ? But I used your idea to
check the buffer length.  That helped filter out a lot of the signals.  But
other non-keyboard actions can change the buffer length, of course, so it's
not dependable.  :-/


On Tue, Sep 25, 2018 at 10:17 PM Joël Krähemann <jkraehemann gmail com>
wrote:

Hi again,

For sure you should probably use:

g_signal_connect_after(your_text_buffer, "changed",
  G_CALLBACK(your_text_buffer_changed_callback), your_data);

and YOUR_DATA(your_data) just casts to your pointer to a struct or
object containing some information:

struct _YourData{
  gint last_newline_position;
};

Well this is it.

Bests,
Joël



On Wed, Sep 26, 2018 at 7:12 AM Joël Krähemann <jkraehemann gmail com>
wrote:

Hi,

g_object_get(your_text_view,
  "buffer", &your_text_buffer,
  NULL);
g_signal_connect(your_text_buffer, "changed",
  G_CALLBACK(your_text_buffer_changed_callback), your_data);

void your_text_buffer_changed_callback(GtkTextBuffer
*your_text_buffer, gpointer your_data)
{
  gint line_count;

  line_count = gtk_text_buffer_get_line_count(your_text_buffer);

  if(line_count > YOUR_DATA(your_data)->line_count){
    gchar *your_text;

    g_object_get(your_text_buffer,
      "text", &your_text,
      NULL);

    if(your_text[strlen(your_text) - 1] == '\n' &&
YOUR_DATA(your_data)->last_newline_position <
&(your_text[strlen(your_text) - 1]) - your_text){
      //TODO:DMC: implement me
    }
  }
}

by,
Joël

On Wed, Sep 26, 2018 at 6:49 AM Doug McCasland <dougm bravoecho net>
wrote:

Eric, thanks for the ideas!

I tried a bunch of things to distinguish the callbacks, but it got too
complicated.  Checking for a different line number is a clever idea,
but
PgUp and PgDown also move the cursor which changes the line number.
 Similar problems for tracking the char offset in the line (for simply
typing at the end of the last visible line, not creating a new
line/para).

So, it would be nice if there was a simple signal for this case, where
the
window scrolls because of keyboard input in the last visible line.

The reason I want this is, is so my app can scroll the window
automatically, so that the cursor insert point becomes centered
vertically.  In other words, when I'm typing a long paragraph, and
it's the
last visible line, I want it to scroll up, so I'm now typing in the
middle
of the window (vs. continuing to type on the last visible line).

I suppose this is a bit esoteric.

I did create a kbd shortcut to do that scroll manually:

gtk_text_view_scroll_to_iter(..., 0.0, TRUE, 1.0, 0.5)

so I have that to use.


On Tue, Sep 25, 2018 at 2:34 PM <cecashon aol com> wrote:


Not sure how to go about this myself. I see the extra callbacks and
it
would be a good thing to limit them. For filtering maybe check if the
cursor has changed lines along with the adjustment value change.
Suspect
there is a better solution for this.

static void value_changed(GtkAdjustment *v_adjust, gpointer textview)
  {
    static gint s_line=0;
    GtkTextIter iter;
    GtkTextBuffer
*buffer=gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
    GtkTextMark *mark=gtk_text_buffer_get_mark(buffer, "insert");
    gtk_text_buffer_get_iter_at_mark(buffer, &iter, mark);
    gint line=gtk_text_iter_get_line(&iter);
    if(s_line!=line)
      {
        g_print("Scroll Line\n");
        s_line=line;
      }
  }

Eric


-----Original Message-----
From: Doug McCasland <dougm bravoecho net>
To: cecashon <cecashon aol com>
Sent: Tue, Sep 25, 2018 2:10 pm
Subject: Re: is there a signal for typing at bottom of window?

Actually I get 11 signals with a different setting of:
gtk_text_view_set_pixels_inside_wrap()

So it's one signal per vertical pixel perhaps?   I can code for that.

But I also I get those signals during any scrolling (scrollbar or
mousewheel).  How can I distinguish between automatic scrolling at
bottom
and user-commanded scrolling?

thanks





On Tue, Sep 25, 2018 at 1:47 PM Doug McCasland <dougm bravoecho net>
wrote:

Woo-hoo, that works!

BUT, I get 12 signals for each line that is auto-scrolled.  I can
code for
this, but why 12?  Will it always be 12?


On Tue, Sep 25, 2018 at 11:46 AM <cecashon aol com> wrote:


Hi Doug,

Try getting the vertical adjustment of the scrolled window and
connect to
"value-changed". See if that will work. Something like

...
static void value_changed(GtkAdjustment *v_adjust, gpointer
user_data)
  {
  }
...
GtkWidget *scroll=gtk_scrolled_window_new(NULL, NULL);
GtkAdjustment

*v_adjust=gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(scroll));
g_signal_connect(v_adjust, "value-changed",
G_CALLBACK(value_changed),
NULL);
...

Eric





--
Doug McCasland   <dougm bravoecho net>



--
Doug McCasland   <dougm bravoecho net>



--
Doug McCasland   <dougm bravoecho net>
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list gnome org
https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list



-- 
Doug McCasland   <dougm bravoecho net>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]