当前位置: 首页>>代码示例>>Golang>>正文


Golang Window.WMMove方法代码示例

本文整理汇总了Golang中github.com/BurntSushi/xgbutil/xwindow.Window.WMMove方法的典型用法代码示例。如果您正苦于以下问题:Golang Window.WMMove方法的具体用法?Golang Window.WMMove怎么用?Golang Window.WMMove使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在github.com/BurntSushi/xgbutil/xwindow.Window的用法示例。


在下文中一共展示了Window.WMMove方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。

示例1: Move

// Sometimes window managers are really slow about
// re-implemented here because under Fluxbox, win.WMMove() results in the window
// growing vertically by the height of the titlebar!
// So we snapshot the size of the window before we move it,
// move it, compare the sizes, then resize it vertically to be in line with our intentions
//
// this is synchronous: it waits for the window to finish moving before it releases control
// because it would be impossible to selectivley poll for just the move.
func Move(win *xwindow.Window, x, y int) error {
	// snapshot both sorts of window geometries
	decor_geom, geom, err := Geometries(win)
	if err != nil {
		return err
	}
	log.Printf("Move: detected geometry to be %v\n", geom)

	// move the window, then wait for it to finish moving
	err = win.WMMove(x, y)
	if err != nil {
		return err
	}

	// this waits 30MS under non-Fluxbox window manager
	// WHAT DO
	err = PollFor(win, GeometryDiffers(geom))
	if err != nil {
		// if we had a timeout, that means that the geometry didn't derp during
		// moving, and everything is A-OK!
		// skip the rest of the function
		if _, wasTimeout := err.(*TimeoutError); wasTimeout {
			return nil
		}
		return err
	}

	// compare window widths before/after move
	_, post_move_base, err := Geometries(win)
	if err != nil {
		return err
	}

	delta_w := post_move_base.Width() - geom.Width()
	delta_h := post_move_base.Height() - geom.Height()

	if delta_h != 0 || delta_w != 0 {
		// fluxbox has done it again. We issued a move, and we got a taller window, too!
		log.Printf("Move: resetting dimensions to %v due to w/h delta: %v/%v\n", geom, delta_w, delta_h)
		err = win.WMResize(geom.Width(), geom.Height())
		if err != nil {
			return err
		}

		// wait for that to succeed
		err = PollFor(win, GeometryDiffers(post_move_base))
		if err != nil {
			return err
		}
	}
	// make sure window did actually move
	err = PollFor(win, DecorDiffers(decor_geom))
	if err != nil {
		// if we had a timeout, that means that the window didn't move
		// we want to send an error mentioning that fact specifically
		// instead of a generic "lol timeout happan in polling :DDD"
		if te, wasTimeout := err.(*TimeoutError); wasTimeout {
			return &TimeoutError{"Move: window didn't move", te.Timeout}
		}
		// return whatever other error stymied the polling
		return err
	}
	return nil
}
开发者ID:justjake,项目名称:j3,代码行数:72,代码来源:moveresize.go


注:本文中的github.com/BurntSushi/xgbutil/xwindow.Window.WMMove方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。