From: root Date: Fri, 20 Jan 2006 13:32:29 +0000 (+0000) Subject: *** empty log message *** X-Git-Url: http://git.openbox.org/?a=commitdiff_plain;h=9d253edbc5680d0aac8787fe86826d5913c42b2a;p=dana%2Furxvt.git *** empty log message *** --- diff --git a/src/perl/tabbed b/src/perl/tabbed index fc7fe68d..a049432c 100644 --- a/src/perl/tabbed +++ b/src/perl/tabbed @@ -51,12 +51,10 @@ sub new_tab { sub configure { my ($self) = @_; - my $tabheight = $self->int_bwidth + $self->fheight + $self->lineSpace; - $self->{cur}->XMoveResizeWindow ( $self->{cur}->parent, - 0, $tabheight, - $self->width, $self->height - $tabheight + 0, $self->{tabheight}, + $self->width, $self->height - $self->{tabheight} ); } @@ -72,8 +70,18 @@ sub make_current { $self->configure; - for my $atom ($tab->XListProperties) { - warn "$atom\n"; + my $wm_normal_hints = $self->XInternAtom ("WM_NORMAL_HINTS"); + + for my $atom ($tab->XListProperties ($tab->parent)) { + my ($type, $format, $items) = $self->XGetWindowProperty ($tab->parent, $atom); + + if ($atom == $wm_normal_hints) { + my (@hints) = unpack "l!*", $items; + $hints[ 4] += $self->{tabheight}; + $hints[16] += $self->{tabheight}; + $items = pack "l!*", @hints; + } + $self->XChangeWindowProperty ($self->parent, $atom, $type, $format, $items); } $tab->XMapWindow ($tab->parent); @@ -130,6 +138,8 @@ sub on_init { sub on_start { my ($self) = @_; + $self->{tabheight} = $self->int_bwidth + $self->fheight + $self->lineSpace; + $self->cmd_parse ("\x1b[?25l\x1b[?7l"); $self->new_tab; $self->new_tab; diff --git a/src/rxvtperl.xs b/src/rxvtperl.xs index 947feea7..db75a993 100644 --- a/src/rxvtperl.xs +++ b/src/rxvtperl.xs @@ -1652,15 +1652,21 @@ rxvt_term::XGetWindowProperty (Window window, Atom property) unsigned long nitems; unsigned long bytes_after; unsigned char *prop; + XGetWindowProperty (THIS->display->display, window, property, - 0, 1<<30, 0, AnyPropertyType, + 0, 1<<24, 0, AnyPropertyType, &type, &format, &nitems, &bytes_after, &prop); + if (type != None) { + int elemsize = format == 16 ? sizeof (short) + : format == 32 ? sizeof (long) + : 1; + EXTEND (SP, 3); PUSHs (newSVuv ((U32)type)); PUSHs (newSViv (format)); - PUSHs (newSVpvn ((char *)prop, nitems * format / 8)); + PUSHs (newSVpvn ((char *)prop, nitems * elemsize)); XFree (prop); } } @@ -1672,11 +1678,26 @@ rxvt_term::XChangeWindowProperty (Window window, Atom property, Atom type, int f STRLEN len; char *data_ = SvPVbyte (data, len); + int elemsize = format == 16 ? sizeof (short) + : format == 32 ? sizeof (long) + : 1; + XChangeProperty (THIS->display->display, window, property, type, format, PropModeReplace, - (unsigned char *)data, len * 8 / format); + (unsigned char *)data_, len / elemsize); + XSync (THIS->display->display, 0); } +Atom +XInternAtom (rxvt_term *term, char *atom_name, int only_if_exists = FALSE) + C_ARGS: term->display->display, atom_name, only_if_exists + +char * +XGetAtomName (rxvt_term *term, Atom atom) + C_ARGS: term->display->display, atom + CLEANUP: + XFree (RETVAL); + void XDeleteProperty (rxvt_term *term, Window window, Atom property) C_ARGS: term->display->display, window, property @@ -1688,6 +1709,8 @@ rxvt_term::DefaultRootWindow () OUTPUT: RETVAL +#if 0 + Window XCreateSimpleWindow (rxvt_term *term, Window parent, int x, int y, unsigned int width, unsigned int height) C_ARGS: term->display->display, (Window)parent, @@ -1695,6 +1718,8 @@ XCreateSimpleWindow (rxvt_term *term, Window parent, int x, int y, unsigned int term->pix_colors_focused[Color_border], term->pix_colors_focused[Color_border] +#endif + void XReparentWindow (rxvt_term *term, Window window, Window parent, int x = 0, int y = 0) C_ARGS: term->display->display, window, parent, x, y