• (转)Creating a GTK notification area icon using Mono and C#


    转载自:http://www.dijksterhuis.org/creating-gtk-notification-area-icon-mono/

    Cool (Linux) applications have their own icon in the notification area. To add my own icon in the Gnome notification area using Mono only took a few lines of code. In the post below I show how you can add your icon and associate a tooltip and right click menu to it.

     

    GTK provides the StatusIcon class to register your own icon in the notification area.

    StatusIcon  myStatusIcon;
    

    You can provide and load your own icon, but for this example I used one of the GTK stock icons.

    myStatusIcon = StatusIcon.NewFromStock(Stock.Harddisk); // I use a stock icon from Stock.*
    // to avoid having to include an icon file
    myStatusIcon.Visible = true; // Make sure we are displayed

    Adding or changing a tooltip is as straighforward as assigning it:

    // The message to show when the mouse hovers over the icon
    myStatusIcon.Tooltip = "Hello World ToolTip";

    To create a rightclick menu we need to register the PopupMenu event handler:

    myStatusIcon.PopupMenu += OnStatusIconPopupMenu; // Link in the right click popup menu
    /*
    The Status Popup menu is shown when the user right clicks on the toolbar icon */

    protected void OnStatusIconPopupMenu(object sender, EventArgs e)
    {
    Menu popupMenu
    = new Menu();

    MenuItem helloItem
    = new MenuItem("About Hello World");
    helloItem.Show();
    helloItem.Activated
    += new EventHandler(OnHelloAboutActivated);

    popupMenu.Append(helloItem);
    popupMenu.Popup(
    null,null,null,3,Gtk.Global.CurrentEventTime);
    }

    And that is really all there is to it. I have included the complete code below. If you create a new GTK solution in MonoDevelop you will end up with two files, Main.cs and MainWindows.Cs. Replace the MainWindow.CS file with the content below:

    using System;
    using Gtk;

    public partial class MainWindow: Gtk.Window
    {
    StatusIcon myStatusIcon;
    AboutDialog aboutDialog;

    public MainWindow (): base (Gtk.WindowType.Toplevel)
    {

    /* The following lines create the notification area status icon */
    /* Make it visible and link in the right click popup menu */

    myStatusIcon
    = StatusIcon.NewFromStock(Stock.Harddisk); // I use a stock icon from Stock.*
    // to avoid having to include an icon file
    myStatusIcon.Tooltip = "Hello World ToolTip"; // The message to show when the mouse hovers over the icon
    myStatusIcon.Visible = true; // Make sure we are displayed
    myStatusIcon.PopupMenu += OnStatusIconPopupMenu; // Link in the right click popup menu

    /* Not necessary */
    Label AppWindowLabel
    = new Label("Hello World");
    this.Add(AppWindowLabel);

    Build ();
    }

    /* Called when the main application closes */

    protected void OnDeleteEvent (object sender, DeleteEventArgs a)
    {
    Application.Quit ();
    a.RetVal
    = true;
    }

    /* The Status Popup menu is shown when the user right clicks on the toolbar icon */

    protected void OnStatusIconPopupMenu(object sender, EventArgs e)
    {
    Menu popupMenu
    = new Menu();

    MenuItem helloItem
    = new MenuItem("About Hello World");
    helloItem.Show();
    helloItem.Activated
    += new EventHandler(OnHelloAboutActivated);

    popupMenu.Append(helloItem);
    popupMenu.Popup(
    null,null,null,3,Gtk.Global.CurrentEventTime);
    }

    /* If the user select the "About Hello World" menu option, we show the about dialog */

    protected void OnHelloAboutActivated(object sender, EventArgs e)
    {
    aboutDialog
    = new AboutDialog();

    aboutDialog.ProgramName
    = "The About Dialog Popup Demo";
    aboutDialog.Version
    = "1.0beta";
    aboutDialog.Comments
    = "The best things in life are simple!";
    aboutDialog.License
    = "Creative Commons";
    aboutDialog.Authors
    = new string[] { "Martijn Dijksterhuis" };
    aboutDialog.Website
    = "http://www.dijksterhuis.org";
    aboutDialog.Response
    += new ResponseHandler(OnHelloAboutClose);

    aboutDialog.Run();
    }

    /* Catch the "Close" and "X" button event from the about dialog box */

    protected void OnHelloAboutClose(object sender, ResponseArgs e)
    {
    if (e.ResponseId==ResponseType.Cancel || e.ResponseId==ResponseType.DeleteEvent)
    aboutDialog.Destroy();
    }

    }

  • 相关阅读:
    Unity中的欧拉旋转
    Unity-Rigidbody碰撞穿透
    C#实现单例模式的几种方法
    C#OO初级思想
    C#虚方法virtual
    数据库查询
    DNS 域名服务器搭建
    iptables 基本操作
    通过adb 操作手机
    linux 调整逻辑卷空间大小
  • 原文地址:https://www.cnblogs.com/weiqi/p/1964775.html
Copyright © 2020-2023  润新知