yeah I was getting the same issues with multiple runs(continuous runs rather).

I attempted to fiddle with "e->height <= 10 && e->width <= 10" it
might be a valid solution, but it seems liferea and a few others ran
the hook < then 1 times. While I was fiddling and surfing source files
to obtain info, I had a thought of calling the hook from when the
window name is inserted into the window list. I ran on this epiphany
and tried adding the hook call to insert_into_list() in window.c well
sure enough all the tests I have done thus far have returned exactly
one execution of the hook per new window.

I have attached the diff of the changes, I want to test it more but I
feel pretty confident with this solution.

(P.S. If the diffs I am submitting are not quite how you like patches
or I am generating them wrong please do tell me, I am pretty new to
patch writing for C so sketchy on my methods.)

On 3/15/10, Eric A <[email protected]> wrote:
> On Sun, Mar 14, 2010 at 5:09 AM, tomm smith <[email protected]> wrote:
>> I believe I have created a patch for this desired hook. Only had to
>> change a few lines, basically define the hook and add a hook call to
>> new_window(). I am a newborn in the C world so if any of this is
>> hackery that does not comply with GNU coding standards I do apologize.
>> I have attached the patch to this email. I tested out the code very
>> shortly I plan to test it more, but initial test showed everything was
>> working smoothly.
>>
>
> Thanks, I think this is what I'm looking for! I tried it out, but ran
> into a problem. It seems that for most programs,
> new_window(XCreateWindowEvent *e) is called multiple times. For
> example, starting midori issues 2 events and firefox 3 events. In
> fact, the only program that I've tested that calls it just once is
> urxvt.
>
> I tried filtering out the multiple events by looking at the window
> properties. It seems that all the additional events have window
> height/widths (e->height and e->width) of 1, 2, or 10. So by filtering
> all windows with height/widths of <=10, I was able to produce only one
> event per "real window".
>
> I'm not sure whether this would work 100% of the time though. Do you
> have any better ideas?
>
> Thanks,
> Eric
>
Only in .: config.h
Only in .: config.h.in
Only in .: createwin_hook.diff
Only in .: .deps
diff -crB ratorig/src/events.c ./events.c
*** ratorig/src/events.c	2010-03-13 21:43:43.000000000 -0500
--- ./events.c	2010-03-15 15:41:05.000000000 -0400
***************
*** 103,108 ****
--- 103,109 ----
        win = add_to_window_list (s, e->window);
        update_window_information (win);
      }
+ 	
  }
  
  static void
Only in .: .events.c.swo
diff -crB ratorig/src/globals.c ./globals.c
*** ratorig/src/globals.c	2010-03-13 21:43:43.000000000 -0500
--- ./globals.c	2010-03-13 21:46:29.000000000 -0500
***************
*** 231,236 ****
--- 231,237 ----
  LIST_HEAD (rp_quit_hook);
  LIST_HEAD (rp_restart_hook);
  LIST_HEAD (rp_delete_window_hook);
+ LIST_HEAD (rp_new_window_hook);
  
  struct rp_hook_db_entry rp_hook_db[]=
    {{"key",              &rp_key_hook},
***************
*** 241,246 ****
--- 242,248 ----
     {"deletewindow",     &rp_delete_window_hook},
     {"quit",             &rp_quit_hook},
     {"restart",          &rp_restart_hook},
+ 	 {"createwin",				&rp_new_window_hook},
     {NULL, NULL}};
  
  void
diff -crB ratorig/src/globals.h ./globals.h
*** ratorig/src/globals.h	2010-03-13 21:43:43.000000000 -0500
--- ./globals.h	2010-03-13 21:46:42.000000000 -0500
***************
*** 181,186 ****
--- 181,187 ----
  extern struct list_head rp_delete_window_hook;
  extern struct list_head rp_quit_hook;
  extern struct list_head rp_restart_hook;
+ extern struct list_head rp_new_window_hook;
  
  extern struct rp_hook_db_entry rp_hook_db[];
  
Only in .: Makefile
Only in .: Makefile.in
Only in .: rat-crtHook.diff
Only in .: ratorig
Only in .: stamp-h1
Only in .: .vimcuts.txt.swp
diff -crB ratorig/src/window.c ./window.c
*** ratorig/src/window.c	2010-03-13 21:43:43.000000000 -0500
--- ./window.c	2010-03-15 15:42:10.000000000 -0400
***************
*** 376,381 ****
--- 376,384 ----
            return;
          }
      }
+ 	/* insert into list so must have created a new window
+ 	 * call our new window hook */
+ 	hook_run (&rp_new_window_hook);
  
    list_add_tail(&win->node, list);
  }
_______________________________________________
Ratpoison-devel mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/ratpoison-devel

Reply via email to