小编Iva*_*van的帖子

Xlib和Firefox的行为

我正在尝试创建一个小窗口管理器(只是为了好玩),但我在处理由Firefox创建的窗口时遇到问题(只有该应用程序,其他应用程序工作正常)

问题是,在我启动Firefox后,添加我的装饰,它似乎工作正常,但如果我尝试单击菜单按钮,则不会出现(子)窗口.

似乎发生的是,在单击之后,会使用以下值触发ClientMessage事件:

Data: (null)
Data: _NET_WM_STATE_HIDDEN
Data: (null)
Data: (null)
Data: (null)
Run Code Online (Sandbox Code Playgroud)

现在的问题是我不知道如何显示窗口,哪个窗口.我尝试过:

  • XRaiseWindow
  • XMapWindow
  • 我试图获得瞬态窗口并显示它

但没有成功.我不明白的是,如果此客户端消息是由菜单子窗口生成的.

我应该如何显示_NET_WM_STATE_HIDDEN中的窗口?

另一个奇怪的问题是,在收到ClientMessage后,我总是收到2个UnMapNotify事件.

我还有另一个问题,如果我想显示"文件,编辑"菜单(在Firefox中显示,如果我没记错,当你按下Alt键时).

也许Firefox创建了一个窗口树?

这是我处理事件的循环:

while(1){
    XNextEvent(display, &local_event);
    switch(local_event.type){
        case ConfigureNotify:
            configure_notify_handler(local_event, display);
        break;
        case MotionNotify:
            motion_handler(local_event, display);
        break;
        case CreateNotify:
            cur_win = local_event.xcreatewindow.window;
            char *window_name;
            XFetchName(display, cur_win, &window_name);
            printf("Window name: %s\n", window_name);
            if(window_name!=NULL){
                if(!strcmp(window_name, "Parent")){
                    printf("Adding borders\n");
                    XSetWindowBorderWidth(display, cur_win, BORDER_WIDTH);
                }
                XFree(window_name);
            }
        break;
        case MapNotify:
            map_notify_handler(local_event,display, infos);
        break;
        case UnmapNotify: 
            printf("UnMapNotify\n");
        break;
        case DestroyNotify:
            printf("Destroy Event\n");
            destroy_notify_handler(local_event,display);
        break;
        case ButtonPress: …
Run Code Online (Sandbox Code Playgroud)

c x11 xlib

61
推荐指数
1
解决办法
1360
查看次数

Chrome扩展程序,如何修改页面内容(添加内容)

我是Chrome扩展开发的新手,我的第一个项目(学习)是创建一个扩展,将一些html添加到另一个网站的现有页面.

我计划创建一个"页面"操作,该操作会触发具有特定URL的页面...

有没有人看过这样的教程,或者你知道用于向页面添加html的API吗?

google-chrome google-chrome-extension

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

如何将ImageView内的图像对齐到ImageView的底部?

我希望我的ImageView中的drawable显示为与底部(Imageview)对齐,而不是居中.

有可能吗?

android android-layout android-imageview

10
推荐指数
1
解决办法
6158
查看次数

在Chrome扩展程序中打开(导入)文件

我正在尝试为我的chrome扩展程序开发导入功能,但是这个任务似乎比预期更困难.

其实我的想法是用一个

<input type="file" id="myInput">
Run Code Online (Sandbox Code Playgroud)

要加载文件,然后在该元素上添加更改侦听器:

element.addEventListener('change', function(evt){
    read_single_file(evt,tab);
}
Run Code Online (Sandbox Code Playgroud)

现在我面临几个问题:

  1. 第一个问题是打开对话框打开时弹出窗口关闭,它会导致所有相关的对象和代码被弹出页面破坏.并且在查看其他问题时,这是chrome扩展的正常行为,当它失去焦点时,弹出窗口将被破坏.
  2. 我找到了另一种解决方案,建议将文件逻辑添加到后台页面中,如果弹出窗口失去焦点,则不会销毁.然后我在后台添加了这个功能:

    file_import = function(element, tab) {
    
        element.addEventListener('change', function(evt){
            read_single_file(evt,tab);
        }, false);
        element.click();
        console.log("uffa");
    }
    
    Run Code Online (Sandbox Code Playgroud)

然后我更新了我的popup.js来调用后台方法:

    get_current_tab(function(tab){
        var BGPage = chrome.extension.getBackgroundPage();
        BGPage.file_import(document.getElementById('myInput'), tab);
    });
Run Code Online (Sandbox Code Playgroud)

以这种方式,file_import由弹出窗口调用,它将更改侦听器添加到myInput元素,并打开文件打开对话框但是...打开文件对话框弹出消失,以及与之相关的所有内容,然后......同样的问题.

所以我决定尝试在后台页面中创建一个新的输入文件元素,并从中触发click事件,但显然它不起作用.

所以,我被困在这里,没有关于如何解决这个问题的好主意.或者至少我心里很少,但我不知道它们是否有效,或者它们只是解决方法.

  • 其中之一是将导入功能移动到devtools区域(因为它是一个对开发人员有用的扩展),我希望打开文件对话框不会导致我的扩展被破坏.
  • 或者另一种可能是将导入文件逻辑移动到外部页面,该外部页面打开新选项卡并从文件中导入值.在这种情况下,由于我只需要访问,除了文件内容是当前标签网址,我可能不必使用谷歌Chrome API.
  • 第三个想法是将html元素注入当前页面,然后从扩展中访问它直接将侦听器添加到该元素,在这种情况下,如果弹出窗口被破坏,我认为我的侦听器不会被销毁(页面将在导入后重新加载,因此我的隐藏输入将仅保留操作所需的时间).

总结我的问题是:

  1. 有一种干净的方式来读取chrome扩展中的文件内容,而无需使用外部文件,打开新标签等(如果可能,我更喜欢将所有内容保留在扩展中)?
  2. 如果没有可能使用JavaScript文件预填充新选项卡?
  3. 我可以在当前页面内的DOM元素中添加一个监听器吗?

javascript google-chrome google-chrome-extension

9
推荐指数
1
解决办法
4035
查看次数

Android日历,获取事件ID

我正在编写一个需要在android中的日历中添加一些事件的应用程序.对于插入我只使用了以下代码:

public void onItemClick(AdapterView<?> adapter, View curview, int position, long id) {
    WhoisEntry entry = this.adapter.getItem(position);      
    String domainName = entry.getDomainName();
    Date expDate = entry.expirationDate;
    Toast.makeText(getApplicationContext(), "Domain: " + domainName, Toast.LENGTH_SHORT).show();
    Calendar cal = Calendar.getInstance();            
    Intent intent = new Intent(Intent.ACTION_EDIT);
    intent.setType("vnd.android.cursor.item/event");
    intent.putExtra("beginTime", entry.expirationDate);
    intent.putExtra("allDay", false);       
    intent.putExtra("endTime", cal.getTimeInMillis()+60*60*1000);
    intent.putExtra("title", "Expiration of " + entry.domainName);
    startActivity(intent);
}
Run Code Online (Sandbox Code Playgroud)

现在我想知道是否有可能获得与该事件相关联的id,在插入事件后以这种方式,并且其id被保存到我的应用程序中,用户可以直接从应用程序内部调用该事件.可能吗?

java android android-calendar

8
推荐指数
1
解决办法
2万
查看次数

bash脚本:如何使用对话框获取radiolist上的项目名称

我需要使用对话框界面在bash脚本中创建一个radiolist,例如,如果我有以下列表:

dialog --backtitle "OS infomration" \
--radiolist "Select OS:" 10 40 3 \
 1 "Linux 7.2" off \
 2 "Solaris 9" on \
 3 "HPUX 11i" off
Run Code Online (Sandbox Code Playgroud)

我希望当用户选择一个选项并按下确定时,我的脚本会读取项目名称(而不是项目编号).

有可能的?谢谢!

linux bash shell dialog

7
推荐指数
1
解决办法
5305
查看次数

Android queryIntentActivities始终返回空列表

我正在尝试获取所有能够发送短信的应用程序列表.

我找到了几个解决方案,建议使用PackageManager.

我认为要使用的Intent是ACTION_SEND,但是当我运行我的代码时,我总是收到一个空列表.

这是我的代码:

        Intent mainIntent = new Intent(Intent.ACTION_SEND, null);
        List<ResolveInfo> pkgAppsList = getApplicationContext().getPackageManager().queryIntentActivities( mainIntent, PackageManager.GET_RESOLVED_FILTER);
        int size = pkgAppsList.size();
        int i = 0;
        Log.i(TAG, "Size: " + size);
        for(ResolveInfo infos : pkgAppsList){
            String name = infos.activityInfo.applicationInfo.loadLabel(getPackageManager()).toString();
            Log.i(TAG, "name: " + name);
        }
Run Code Online (Sandbox Code Playgroud)

任何的想法?

java android

7
推荐指数
1
解决办法
4435
查看次数

没有调用MarshalJSON

我正在尝试MarshalJSON使用界面自定义输出:

func (m *RawMessage) MarshalJSON() ([]byte, error)
Run Code Online (Sandbox Code Playgroud)

我按照那个教程:http://choly.ca/post/go-json-marshalling/

我的目的是删除用true/false替换其中一个字段(如果设置或不设置),所以我最终编写了该函数:

func (u *Edition) MarshalJSON() ([]byte, error) {
    var vaultValue bool
    vaultValue = true
    var onlineValue bool
    vaultValue = false
    fmt.Println("here")
    if u.Vault == nil {
        vaultValue = false
    }
    if u.Online == nil {
        onlineValue = false
    }
    type AliasEdition Edition
    return json.Marshal(&struct {
        Vault  bool `json:"vault,omitempty"`
        Online bool `json:"online,omitempty"`
        *AliasEdition
    }{
        Vault:        vaultValue,
        Online:       onlineValue,
        AliasEdition: (*Alias)(u),
    })
}
Run Code Online (Sandbox Code Playgroud)

JSON是使用以下指令从地图创建的:

json.NewEncoder(w).Encode(EditionsMap)
Run Code Online (Sandbox Code Playgroud)

显然EditionsMapEdition …

json marshalling go

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

Android和Google语音 - 收听传入的短信

是否可以收听通过Google Voice收到的短信?

谢谢.

sms android google-voice

5
推荐指数
2
解决办法
615
查看次数

xcb键盘按钮的含义

我试图弄清楚由什么键处理:

  • XCB_MOD_MASK_1
  • XCB_MOD_MASK_2
  • XCB_MOD_MASK_3
  • XCB_MOD_MASK_4
  • XCB_MOD_MASK_5

在xcb中,对于XCB_MOD_MASK_1,它似乎是Alt(我是对的吗?),但是对于其他按钮,我在任何地方都找不到映射(我尝试在发布之前用Google搜索它们,但没有成功)。

那么与这些面罩相关的通常的按键是什么?

x11 xcb

5
推荐指数
2
解决办法
1083
查看次数