Set window icon on linux

This commit is contained in:
Kovid Goyal
2017-01-18 20:52:06 +05:30
parent ed77692a87
commit df5c225b5a
6 changed files with 20 additions and 2 deletions

View File

@@ -75,7 +75,9 @@ mouse_button_pressed = defaultdict(lambda: False)
mouse_cursor_pos = [0, 0]
viewport_size = ViewportSize()
cell_size = ViewportSize()
terminfo_dir = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'terminfo')
base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
terminfo_dir = os.path.join(base_dir, 'terminfo')
logo_data_file = os.path.join(base_dir, 'logo', 'kitty.rgba')
main_thread = threading.current_thread()
shell_path = pwd.getpwuid(os.geteuid()).pw_shell or '/bin/sh'

View File

@@ -285,6 +285,15 @@ set_clipboard_string(Window *self, PyObject *args) {
Py_RETURN_NONE;
}
static PyObject*
set_window_icon(Window *self, PyObject *args) {
GLFWimage logo;
Py_ssize_t sz;
if(!PyArg_ParseTuple(args, "s#ii", &(logo.pixels), &sz, &(logo.width), &(logo.height))) return NULL;
glfwSetWindowIcon(self->window, 1, &logo);
Py_RETURN_NONE;
}
static PyObject*
_set_title(Window *self, PyObject *args) {
@@ -327,6 +336,7 @@ static PyMethodDef methods[] = {
MND(set_clipboard_string, METH_VARARGS),
MND(make_context_current, METH_NOARGS),
{"set_title", (PyCFunction)_set_title, METH_VARARGS, ""},
{"set_icon", (PyCFunction)set_window_icon, METH_VARARGS, ""},
{NULL} /* Sentinel */
};

View File

@@ -11,7 +11,7 @@ from gettext import gettext as _
from .config import load_config, load_cached_values, cached_values, save_cached_values
from .constants import appname, str_version, config_dir, viewport_size, isosx
from .constants import appname, str_version, config_dir, viewport_size, isosx, logo_data_file
from .layout import all_layouts
from .boss import Boss
from .shaders import GL_VERSION
@@ -104,6 +104,9 @@ def run_app(opts, args):
viewport_size.width, viewport_size.height, args.cls)
window.set_title(appname)
window.make_context_current()
if not isosx:
with open(logo_data_file, 'rb') as f:
window.set_icon(f.read(), 256, 256)
viewport_size.width, viewport_size.height = window.get_framebuffer_size()
glewInit()
boss = Boss(window, opts, args)