How to add a menuitem in Nautilus context menu.

博客介绍了在文件管理器中添加命令和菜单项的操作,包括在nautilus - directory - view - ui.xml中添加命令和菜单项,在fm - directory - view.c的函数里添加相关项,还说明了如何在回调函数中启动对应程序,以及获取实际文件名的方法。

1. In src/file-manager/ directory, add command section and menuitem section in nautilus-directory-view-ui.xml.

<commands>
    ...
    <cmd name=”Name Convert”
        _label=”Name _Convert”
        _tip=”Convert the file name”/>
    ...
</commands>

<popup name=“selection“ tearoff=“0“>
    ....
    <placeholder name=“File Actions“ delimit=“top“>
        ...
       <menuitem name=”Name Convert” verb=”Name Convert”/>
        ...
    </placeholder>
    ...
</popup> 

2. In fm-directory-view.c:

    #define FM_DIRECTORY_VIEW_COMMAND_NAME_CONVERT    “/commands/Name Convert“

    In real_merge_menus () function, BonoboUIVerb verbs [] array, add the following item:
    BONOBO_UI_VERB (“Name Convert“, name_convert_callback),

    You could use nautilus_bonobo_set_sensitive () or nautilus_bonobo_hidden () to show or hide this menuitem.

3. How to launch the corresponding program in callback function:

    GnomeVFSMimeApplication *test;
    
    test = g_new0 (GnomeVFSMimeApplication, 1);
    test->id = g_strdup (“test“);
    test->name = g_strdup (“this is a test“);
    test->command = g_strdup (“test“);
    test->expects_uris = GNOME_VFS_MIME_APPLICATION_ARGUMENT_TYPE_PATHS;
    
    file = NAUTILUS_FILE (selection->data);
    nautilus_launch_application (test, file, NULL);

    g_free (test->id);
    g_free (test->name);
    g_free (test->name);
    g_free (test);

    You could use gnome_vfs-get_local_path_from_uri (nautilus_file_get_uri (file)) to get the actuall file name.

    

package com.oplus.engineermode.aftersale; import android.os.Bundle; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import androidx.annotation.Nullable; import com.oplus.engineermode.R; import com.oplus.engineermode.entrance.EngineerFragmentContainer; public class DeviceCalibrationContainer extends EngineerFragmentContainer { private static final int MENU_ITEM_SAVE = Menu.FIRST; private static final int MENU_ITEM_CANCEL = Menu.FIRST + 1; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public boolean onCreateOptionsMenu(Menu menu) { if (getFragmentContent().contains("DeviceCalibrationActivity")) { menu.add(0, 1, Menu.NONE, "Batch Test Mode"); menu.add(0, 2, Menu.NONE, "Reset All"); return true; } else if (getFragmentContent().contains("AdvancedSettings")) { menu.add(0, MENU_ITEM_SAVE, 0, R.string.wifi_ip_settings_menu_save).setIcon(android.R.drawable.ic_menu_save); menu.add(0, MENU_ITEM_CANCEL, 0, R.string.wifi_ip_settings_menu_cancel).setIcon(android.R.drawable.ic_menu_close_clear_cancel); } return super.onCreateOptionsMenu(menu); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { return super.onKeyDown(keyCode, event); } @Override public boolean onOptionsItemSelected(MenuItem menuItem) { if (getFragmentContent().contains("DeviceCalibrationActivity")) { return ((DeviceCalibrationActivity) getFragment()).onOptionsItemSelected(menuItem); } return super.onOptionsItemSelected(menuItem); } }
最新发布
10-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值