小编mih*_*ild的帖子

xmonad中的KDE弹出通知

我使用xmonad和KDE,并希望使用它的弹出通知.默认情况下,第一个弹出窗口显示正确,但在它消失后,下一个弹出窗口将不会显示.如果我添加一个新的"通知"小部件 - 它可以再显示一个弹出窗口,但之后会出现相同的情况.如果将这些行添加到xmonad配置(我不太明白,它是如何工作的),弹出窗口按预期开始工作:

, manageHook = ((className =? "krunner" <||> className =? "Plasma-desktop") >>= return .
    not --> manageHook kde4Config) <+>
    (kdeOverride --> doFloat) <+> myManageHook
Run Code Online (Sandbox Code Playgroud)

一般来说,和

[ className =? "Plasma-desktop"      --> doFloat <+> doF W.focusDown ]
Run Code Online (Sandbox Code Playgroud)

在myManageHook中.

但现在,因为'className =?"等离子桌面"过于笼统,开始时会发生很奇怪的事情.如果在加载KDE后将此行添加到配置中,一切正常.有没有办法找到确切的通知窗口,或只在完全KDE加载后使用这一行,或者,可能是,任何更好的方式使通知工作?

谢谢你,抱歉英语不好.

notifications kde xmonad

6
推荐指数
1
解决办法
1833
查看次数

调用非活动联合成员的成员函数

调用foo以下代码会导致UB吗?

using vec = std::array<int, 1>;
struct field0 {
    vec data;
    operator int() {
        return data[0];
    }
};

union a {
    struct {
        vec data;
    } data;
    field0 x;
};

void foo() {
    a bar;
    std::cin >> bar.data.data[0];
    std::cout << bar.x;
}
Run Code Online (Sandbox Code Playgroud)

根据标准,x并且data具有相同的地址,因此强制转换thisvec*. 此外,field0并且与vec布局兼容,因此data通过x.data或反之亦然检查应该是安全的。

然而,我们不只是检查x.data,我们x在它的生命周期之外调用非静态成员函数(或者我们?我找不到x生命周期应该开始的原因),所以正式它是UB。这是正确的吗?

我想要实现的是名称数组字段的通用方法的明确定义版本,例如 union a { int data[3]; int x, y, z};

更新: …

c++ union undefined-behavior

3
推荐指数
1
解决办法
101
查看次数

标签 统计

c++ ×1

kde ×1

notifications ×1

undefined-behavior ×1

union ×1

xmonad ×1