[meego-commits] 24321: Changes to MeeGo:1.2.0:oss:Update:Testing/meego-panel-applications
michaelwood
no_reply at build.meego.com
Thu Oct 20 10:03:13 UTC 2011
Hi,
I have made the following changes to meego-panel-applications in project MeeGo:1.2.0:oss:Update:Testing. Please review and accept ASAP.
Thank You,
michaelwood
[This message was auto-generated]
---
Request #24321:
submit: home:michaelwood:branches:MeeGo:1.2.0:oss:Update:Testing/meego-panel-applications(r3)(noupdate) -> MeeGo:1.2.0:oss:Update:Testing/meego-panel-applications
Message:
None
State: new 2011-10-20T02:50:30 michaelwood
Comment: None
changes files:
--------------
--- meego-panel-applications.changes
+++ meego-panel-applications.changes
@@ -0,0 +1,7 @@
+* Wed Oct 19 2011 Michael Wood <michael.g.wood at linux.intel.com> - 0.2.7
+ - Update to version 0.2.7
+ - Fixes BMC#23079
+ - Fixes BMC#23534
+ - Fixes BMC#23080
+ - Fixes BMC#23082
+
old:
----
meego-panel-applications-0.2.6.tar.gz
new:
----
meego-panel-applications-0.2.7.tar.gz
spec files:
-----------
--- meego-panel-applications.spec
+++ meego-panel-applications.spec
@@ -7,7 +7,7 @@
Name: meego-panel-applications
Summary: Applications panel
-Version: 0.2.6
+Version: 0.2.7
Release: 1
Group: System/Desktop
License: LGPL 2.1
other changes:
--------------
++++++ meego-panel-applications-0.2.6.tar.gz -> meego-panel-applications-0.2.7.tar.gz
--- configure
+++ configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68 for meego-panel-applications 0.2.6.
+# Generated by GNU Autoconf 2.68 for meego-panel-applications 0.2.7.
#
#
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -706,8 +706,8 @@
# Identity of this package.
PACKAGE_NAME='meego-panel-applications'
PACKAGE_TARNAME='meego-panel-applications'
-PACKAGE_VERSION='0.2.6'
-PACKAGE_STRING='meego-panel-applications 0.2.6'
+PACKAGE_VERSION='0.2.7'
+PACKAGE_STRING='meego-panel-applications 0.2.7'
PACKAGE_BUGREPORT=''
PACKAGE_URL=''
@@ -1482,7 +1482,7 @@
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures meego-panel-applications 0.2.6 to adapt to many kinds of systems.
+\`configure' configures meego-panel-applications 0.2.7 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1553,7 +1553,7 @@
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of meego-panel-applications 0.2.6:";;
+ short | recursive ) echo "Configuration of meego-panel-applications 0.2.7:";;
esac
cat <<\_ACEOF
@@ -1665,7 +1665,7 @@
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-meego-panel-applications configure 0.2.6
+meego-panel-applications configure 0.2.7
generated by GNU Autoconf 2.68
Copyright (C) 2010 Free Software Foundation, Inc.
@@ -2030,7 +2030,7 @@
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by meego-panel-applications $as_me 0.2.6, which was
+It was created by meego-panel-applications $as_me 0.2.7, which was
generated by GNU Autoconf 2.68. Invocation command line was
$ $0 $@
@@ -2846,7 +2846,7 @@
# Define the identity of the package.
PACKAGE='meego-panel-applications'
- VERSION='0.2.6'
+ VERSION='0.2.7'
# Some tools Automake needs.
@@ -13253,13 +13253,13 @@
gio-unix-2.0
gtk+-2.0
libgnome-menu
- mx-1.0 >= 0.99.0\""; } >&5
+ mx-1.0 >= 1.4.0\""; } >&5
($PKG_CONFIG --exists --print-errors "clutter-x11-1.0
gdk-x11-2.0
gio-unix-2.0
gtk+-2.0
libgnome-menu
- mx-1.0 >= 0.99.0") 2>&5
+ mx-1.0 >= 1.4.0") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
@@ -13268,7 +13268,7 @@
gio-unix-2.0
gtk+-2.0
libgnome-menu
- mx-1.0 >= 0.99.0" 2>/dev/null`
+ mx-1.0 >= 1.4.0" 2>/dev/null`
else
pkg_failed=yes
fi
@@ -13284,13 +13284,13 @@
gio-unix-2.0
gtk+-2.0
libgnome-menu
- mx-1.0 >= 0.99.0\""; } >&5
+ mx-1.0 >= 1.4.0\""; } >&5
($PKG_CONFIG --exists --print-errors "clutter-x11-1.0
gdk-x11-2.0
gio-unix-2.0
gtk+-2.0
libgnome-menu
- mx-1.0 >= 0.99.0") 2>&5
+ mx-1.0 >= 1.4.0") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
@@ -13299,7 +13299,7 @@
gio-unix-2.0
gtk+-2.0
libgnome-menu
- mx-1.0 >= 0.99.0" 2>/dev/null`
+ mx-1.0 >= 1.4.0" 2>/dev/null`
else
pkg_failed=yes
fi
@@ -13322,14 +13322,14 @@
gio-unix-2.0
gtk+-2.0
libgnome-menu
- mx-1.0 >= 0.99.0" 2>&1`
+ mx-1.0 >= 1.4.0" 2>&1`
else
APPLICATIONS_PKG_ERRORS=`$PKG_CONFIG --print-errors "clutter-x11-1.0
gdk-x11-2.0
gio-unix-2.0
gtk+-2.0
libgnome-menu
- mx-1.0 >= 0.99.0" 2>&1`
+ mx-1.0 >= 1.4.0" 2>&1`
fi
# Put the nasty error message in config.log where it belongs
echo "$APPLICATIONS_PKG_ERRORS" >&5
@@ -13339,7 +13339,7 @@
gio-unix-2.0
gtk+-2.0
libgnome-menu
- mx-1.0 >= 0.99.0) were not met:
+ mx-1.0 >= 1.4.0) were not met:
$APPLICATIONS_PKG_ERRORS
@@ -13999,7 +13999,7 @@
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by meego-panel-applications $as_me 0.2.6, which was
+This file was extended by meego-panel-applications $as_me 0.2.7, which was
generated by GNU Autoconf 2.68. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -14065,7 +14065,7 @@
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-meego-panel-applications config.status 0.2.6
+meego-panel-applications config.status 0.2.7
configured by $0, generated by GNU Autoconf 2.68,
with options \\"\$ac_cs_config\\"
--- configure.ac
+++ configure.ac
@@ -1,5 +1,5 @@
AC_PREREQ(2.53)
-AC_INIT(meego-panel-applications, 0.2.6)
+AC_INIT(meego-panel-applications, 0.2.7)
AC_CONFIG_AUX_DIR([build])
AC_CONFIG_MACRO_DIR([build])
AM_INIT_AUTOMAKE([1.10 foreign -Wno-portability no-define])
@@ -39,7 +39,7 @@
gio-unix-2.0
gtk+-2.0
libgnome-menu
- mx-1.0 >= 0.99.0)
+ mx-1.0 >= 1.4.0)
AC_ARG_ENABLE([cache],
[AC_HELP_STRING([--enable-cache],
--- data/theme/Makefile.am
+++ data/theme/Makefile.am
@@ -5,6 +5,7 @@
apps-normal.png \
panel.css \
clear-entry.png \
+ clear-entry-hover.png \
content-pane-background.png \
content-pane-header.png \
launcher-button-fav-toggle-active.png \
--- data/theme/Makefile.in
+++ data/theme/Makefile.in
@@ -231,6 +231,7 @@
apps-normal.png \
panel.css \
clear-entry.png \
+ clear-entry-hover.png \
content-pane-background.png \
content-pane-header.png \
launcher-button-fav-toggle-active.png \
--- data/theme/clear-entry-hover.png
+++ data/theme/clear-entry-hover.png
+PNG
+
+
IHDRB
pHYs
+OiCCPPhotoshop ICC profilexÚSgTSé=÷ÞôBKKoR RB&*! J!¡ÙQÁEEÈ Q,
+Øä!¢£Êûá{£kÖ¼÷æÍþµ×>ç¬ó³ÏÀH3Q5©B
àÇÄÆáä.@
+$p³d!sý#ø~<<+"À¾xÓÀMÀ0
ÿêB\Àt8K@zB¦@F&S `ËcbãP-`'æÓø{[! eDh;¬ÏVEX0fKÄ9Ø-0IWfH°·Àβ0Q
){`È##xFòW<ñ+®ç*x²<¹$9E[-qWW.
(ÎI+6aa@.Ây24àóÌ àóýxήÎÎ6¶_-ê¿ÿ"bbãþåÏ«p@át~Ñþ,/³;mþ¢%îh^ u÷f²@µ éÚWópø~<<E¡¹ÙÙåääØJÄB[aÊW}þgÂ_ÀWýlù~<ü÷õà¾â$2]GøàÂÌôL¥
Ï bÜæGü·ÿü
Ó"ÄIb¹X*ãQqDó2¥"B)Å%Òÿdâß,û>ß5°j>{-¨]cöK'XtÀâ÷ò»oÁÔ(háÏwÿï?ýG %fIq^D$.Tʳ?ÇD *°AôÁ,À
ÁÜÁü`6B$ÄÂBB
+d
r`)¬B(Ͱ
*`/Ô@
4ÀQhp.ÂU¸=púaÁ(¼ AÈa!ÚbX#
ø!ÁH$ ÉQ"K5H1RT UH
ò=r9\Fº;È2ü¼G1²Q=ÔµC¹¨7F¢Ðdt1 Ðr´=6¡çЫhÚ>CÇ0Àè3Äl0.ÆÃB±8, c˱"¬«Æ°V¬»õcϱwEÀ 6wB a
AHXLXNØH¨
$4Ú 7 QÂ'"¨K´&ºùÄb21XH,#Ö/{CÄ7$C2'¹I±¤TÒÒFÒnR#é,©4H#ÉÚdk²9, +È
ääÃä3ää!ò[
+b at q¤øSâ(RÊjJåå4åe2AU£Rݨ¡T5ZB¡¶R¯Q¨4u9ÍIK¥¢Óhh÷i¯ètºÝ
NÐWÒËéGèèôw
Çg(gw¯L¦ÓÇT071ëçoUX*¶*|Ê
+J&*/T©ª¦ªÞªUóUËT©^S}®FU3Sã© Ô«UªPëSSg©;¨ªg¨oT?¤~YýYÃLÃOC¤Q ±_ã¼Æ c³x,!k
«u5Ä&±ÍÙ|v*»ý
»=ª©¡9C3J3W³Róf?ãqøtN ç(§ó~Þï)â)¦4L¹1e\kªX«H«Q«Gë½6®í§¦½E»YûAÇJ'\'GgÎçSÙSݧ
+§M=:õ®.ªk¥¡»Dw¿n§î¾^Lo§Þy½çú
}/ýTýmú§õGX³$ÛÎ<Å5qo<
/ÇÛñQC]Ã@C¥aaá¹Ñ<£ÕFFiÆ\ã$ãmÆmÆ£&&!&KMêMîRM¹¦)¦;L;LÇÍÌÍ¢ÍÖ5=1×2çç×ß·`ZxZ,¶¨¶¸eI²äZ¦Yî¶¼n
Z9Y¥XUZ]³F%Ö»»§§¹NN«Ögðñ¶É¶©·°åØÛ®¶m¶}agbg·Å®Ãî½}º}ý=
Ù«
Z
~s´r:V:ÞÎî?}Åôé/gXÏÏØ3ã¶Ë)ÄiSÓGgg¹sóKË.>.ÆÝȽäJtõq]ázÒõ³Âí¨Û¯î6îiîÜÌ4)Y3sÐÃÈCàQåÑ?0k߬~OCOgµç#/c/W×°·¥wª÷aï>ö>rã>ã<7Þ2ÞY_Ì7À·È·ËOÃo_
ßC#ÿdÿzÿѧ%gA[ûøz|!¿?:Ûeö²ÙíA ¹AAåÁ!hÈì!÷çÎÎi
P~èÖÐaæaÃ~'
W?pXÑ15wÑÜCsßDúDDÞg1O9¯-J5*>ª.j<Ú7º4º?Æ.fYÌÕXXIlK
9.*®6nl¾ßüíóââã{/È]py¡ÎÂô
§©.,:@LN8ðA*¨%òw%
+yÂ
Âg"/Ñ6ÑØC\*
NòH*Mzì¼5y$Å3¥,å¹'©¼L
LÝ:v m2=:½1qBª!M¶gêgæfvˬe
²þÅn·/
Ék³¬Y-
+¶B¦èTZ(×*²geWf¿ÍÊ9«+Íí̳ÊÛ7ïÿíÂá¶¥KW-
X潬j9²<qyÛ
+ã+V¬<¸¶*mÕO«íW®~½&zMk^ÁÊÁµkëU
+å
}ëÜ×í]OX/Yßµaú>®ÛØ(Üxåoʿܴ©«Ä¹dÏfÒféæÞ-[ªæn
ÙÚ´
ßV´íõöEÛ/Í(Û»¶C¹£¿<¸¼e§ÉÎÍ;?T¤TôTúT6îÒݵa×ønÑî{¼ö4ìÕÛ[¼÷ý>ɾÛUUMÕfÕeûIû³÷?®ªéøûm]NmqíÇÒý#¶×¹ÔÕ
Ò=TRÖ+ëGǾþïw-
6
UÆâ#pDyäé÷ ß÷
:Úv{¬áÓv
g
/jBòFSû[b[ºOÌ>ÑÖêÞzüGÛ4<YyJóTÉiÚéÓgòÏ}~.ùÜ`Û¢¶{çcÎßjoïºtáÒEÿç;¼;Î\ò¸tò²ÛåW¸W¯:_mêtê<þÓOÇ»»®¹\k¹îz½µ{f÷é7ÎÝô½yñÿÖÕ9=ݽózo÷Å÷õßÝ~r'ýÎË»Ùw'î¼O¼_ô@íAÙCÝÕ?[þÜØïÜjÀw óÑÜG÷
ÏþõCË
ë8>99â?rýéü§CÏdÏ&þ¢þË®/~øÕë×ÎÑÑ¡ò¿m|¥ýêÀë¯ÛÆÂÆ
¾Éx31^ôVûíÁwÜw
ï£ßOä| (ÿhù±õSЧûÿóüc3-Û cHRMz%ùÿéu0ê`:o_ÅFðIDATxÚ´ÁnA¿Îl%&ìîA°»ÀÑÐ'ÐcioáµÇ^}VÛÔTíx2KÔÞjbd1´60»ëA$°Zú&óÏ|3ùþfn}sÀ·ãÿ*ð
xT5à&ð°¸\Ø@Xn`uгa«bp¬cQ+_²]¥ÆÎ÷z=|ßHÖÆMA@Ãuë:ÍfÃ4Çã4\ PJa&DbzpëøB>ǽ»wøøé3Û¯v°
Ó
{ÒRjÆÚ³PðX1]ç[¥çyò¹? JÇg¹ø!ÕjX,ªbn}s+h¸.7RI
RòõðǶR²W.³ózL6K4þÆ×I¾×]^l¿Äó<²Ì9¨NB'Äù%RjÃOÜø«¢´TDJÉÁÁç*¤
CÁívÓ0~÷ÊeÖoµò9
>¸O«ÕºX)EÚqFuv
T§s±®ð}ÑHÎà!èº>Tä{
¥0-Ã0¦ B©¿º]Ëé~¿b¤°ÿªø´¦i¡À©Þ]ÁïöV+ÀÑ¡GÀöà
P¿°>`,û¿Ì5À#.PpIEND®B`--- data/theme/panel.css
+++ data/theme/panel.css
@@ -87,3 +87,8 @@
background-image: url("launcher-button-fav-toggle-hover.png");
}
+MxLabel.placeholder {
+ color: #595959ff;
+ font-size: 16px;
+ padding: 6 6 6 15;
+}
--- src/Makefile.am
+++ src/Makefile.am
@@ -12,8 +12,6 @@
meego_panel_applications_LDADD = $(APPLICATIONS_LIBS) $(MPL_LIBS)
meego_panel_applications_SOURCES = \
- mnb-entry.c \
- mnb-entry.h \
mnb-expander.c \
mnb-expander.h \
mnb-filter.c \
--- src/Makefile.in
+++ src/Makefile.in
@@ -53,9 +53,8 @@
CONFIG_CLEAN_VPATH_FILES =
am__installdirs = "$(DESTDIR)$(libexecdir)" "$(DESTDIR)$(servicedir)"
PROGRAMS = $(libexec_PROGRAMS)
-am_meego_panel_applications_OBJECTS = mnb-entry.$(OBJEXT) \
- mnb-expander.$(OBJEXT) mnb-filter.$(OBJEXT) \
- mnb-launcher-application.$(OBJEXT) \
+am_meego_panel_applications_OBJECTS = mnb-expander.$(OBJEXT) \
+ mnb-filter.$(OBJEXT) mnb-launcher-application.$(OBJEXT) \
mnb-launcher-button.$(OBJEXT) mnb-launcher-grid.$(OBJEXT) \
mnb-launcher-tree.$(OBJEXT) meego-netbook-launcher.$(OBJEXT) \
meego-panel-applications.$(OBJEXT)
@@ -272,8 +271,6 @@
meego_panel_applications_LDADD = $(APPLICATIONS_LIBS) $(MPL_LIBS)
meego_panel_applications_SOURCES = \
- mnb-entry.c \
- mnb-entry.h \
mnb-expander.c \
mnb-expander.h \
mnb-filter.c \
@@ -384,7 +381,6 @@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/meego-netbook-launcher.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/meego-panel-applications.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mnb-entry.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mnb-expander.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mnb-filter.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mnb-launcher-application.Po at am__quote@
--- src/meego-netbook-launcher.c
+++ src/meego-netbook-launcher.c
@@ -58,6 +58,8 @@
#define LAUNCHER_BUTTON_HEIGHT 65
#define LAUNCHER_BUTTON_ICON_SIZE 48
+#define PLACEHOLDER_TEXT _("To see your favourite applications here and on the myzone, hover your pointer over the application you want to add and select the pin in the top right.")
+
#define REAL_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), MNB_TYPE_LAUNCHER, MnbLauncherPrivate))
@@ -79,6 +81,7 @@
enum
{
LAUNCHER_ACTIVATED,
+ COMMANDLINE_LAUNCH_ACTIVATED,
LAST_SIGNAL
};
@@ -102,6 +105,7 @@
MxExpander *first_expander;
GSList *launchers;
gboolean show_expanders;
+ guint fav_grid_items;
/* Static widgets, managed by clutter. */
ClutterActor *filter_hbox;
@@ -109,6 +113,7 @@
ClutterActor *scrollview;
MxExpander *default_expander;
ClutterActor *fav_grid;
+ ClutterActor *placeholder_label;
/* "Dynamic" widgets (browser vs. filter mode).
* These are explicitely ref'd and destroyed. */
@@ -136,43 +141,6 @@
}
static void
-launcher_button_hovered_cb (MnbLauncherButton *launcher,
- MnbLauncher *self)
-{
- MnbLauncherPrivate *priv = GET_PRIVATE (self);
- MxWidget *expander;
-
- if (priv->is_filtering)
- {
- const GSList *launchers_iter;
- for (launchers_iter = priv->launchers;
- launchers_iter;
- launchers_iter = launchers_iter->next)
- {
- mx_stylable_set_style_pseudo_class (MX_STYLABLE (launchers_iter->data),
- NULL);
- }
- }
- else
- {
- clutter_container_foreach (CLUTTER_CONTAINER (priv->fav_grid),
- (ClutterCallback) mx_stylable_set_style_pseudo_class,
- NULL);
-
- expander = mnb_launcher_grid_find_widget_by_pseudo_class (
- MNB_LAUNCHER_GRID (priv->apps_grid),
- "active");
- if (expander)
- {
- ClutterActor *inner_grid = mx_bin_get_child (MX_BIN (expander));
- clutter_container_foreach (CLUTTER_CONTAINER (inner_grid),
- (ClutterCallback) mx_stylable_set_style_pseudo_class,
- NULL);
- }
- }
-}
-
-static void
launcher_button_activated_cb (MnbLauncherButton *launcher,
MnbLauncher *self)
{
@@ -202,9 +170,6 @@
MxWidget *clone = mnb_launcher_button_create_favorite (launcher);
clutter_container_add (CLUTTER_CONTAINER (priv->fav_grid),
CLUTTER_ACTOR (clone), NULL);
- g_signal_connect (clone, "hovered",
- G_CALLBACK (launcher_button_hovered_cb),
- self);
g_signal_connect (clone, "activated",
G_CALLBACK (launcher_button_activated_cb),
self);
@@ -346,8 +311,6 @@
{
if (e != expander)
{
- ClutterActor *inner_grid = mx_bin_get_child (MX_BIN (e));
- mnb_launcher_grid_keynav_out (MNB_LAUNCHER_GRID (inner_grid));
mx_expander_set_expanded (e, FALSE);
}
}
@@ -548,9 +511,6 @@
clutter_container_add (CLUTTER_CONTAINER (inner_grid),
CLUTTER_ACTOR (button), NULL);
- g_signal_connect (button, "hovered",
- G_CALLBACK (launcher_button_hovered_cb),
- self);
g_signal_connect (button, "activated",
G_CALLBACK (launcher_button_activated_cb),
self);
@@ -641,9 +601,6 @@
button);
}
- g_signal_connect (button, "hovered",
- G_CALLBACK (launcher_button_hovered_cb),
- self);
g_signal_connect (button, "activated",
G_CALLBACK (launcher_button_activated_cb),
self);
@@ -736,9 +693,6 @@
TRUE);
clutter_container_add (CLUTTER_CONTAINER (priv->fav_grid),
CLUTTER_ACTOR (button), NULL);
- g_signal_connect (button, "hovered",
- G_CALLBACK (launcher_button_hovered_cb),
- self);
g_signal_connect (button, "activated",
G_CALLBACK (launcher_button_activated_cb),
self);
@@ -853,6 +807,7 @@
}
/* Perform search. */
+
for (iter = priv->launchers; iter; iter = iter->next)
{
MnbLauncherButton *button = MNB_LAUNCHER_BUTTON (iter->data);
@@ -961,14 +916,6 @@
G_OBJECT_CLASS (mnb_launcher_parent_class)->dispose (object);
}
-static void
-_key_focus_in (ClutterActor *actor)
-{
- MnbLauncherPrivate *priv = GET_PRIVATE (actor);
-
- clutter_actor_grab_key_focus (priv->filter);
-}
-
typedef struct {
MnbLauncher *self;
ClutterActorBox box;
@@ -980,20 +927,24 @@
MnbLauncher *self = data->self;
MnbLauncherPrivate *priv = GET_PRIVATE (self);
gfloat scroll_width;
- MxPadding padding;
- guint scrollbar_width;
- gfloat width;
scroll_width = data->box.x2 - data->box.x1;
- mx_widget_get_padding (MX_WIDGET (priv->scrollview), &padding);
- mx_stylable_get (MX_STYLABLE (priv->scrollview),
- "x-mx-scrollbar-width", &scrollbar_width,
- NULL);
+ /*
+ *MxPadding padding;
+ *gfloat width;
+ *guint scrollbar_width;
+ *mx_widget_get_padding (MX_WIDGET (priv->scrollview), &padding);
+ *mx_stylable_get (MX_STYLABLE (priv->scrollview),
+ * "x-mx-scrollbar-width", &scrollbar_width,
+ * NULL);
+ *
+ * width = scroll_width -
+ * scrollbar_width - padding.left - padding.right - 15;
- width = scroll_width -
- scrollbar_width - padding.left - padding.right - 15;
+ * clutter_actor_set_width (priv->apps_grid, width);
+ */
- clutter_actor_set_width (priv->apps_grid, width);
+ clutter_actor_set_width (priv->apps_grid, scroll_width);
return FALSE;
}
@@ -1026,6 +977,9 @@
_apps_grid_find_single_visible_button_cb (ClutterActor *actor,
app_grid_find_single_visible_button_t *data)
{
+ if (data->n_visible == 1)
+ return;
+
if (MNB_IS_LAUNCHER_BUTTON (actor) &&
CLUTTER_ACTOR_IS_REACTIVE (actor) &&
CLUTTER_ACTOR_IS_VISIBLE (actor))
@@ -1067,6 +1021,19 @@
0,
desktop_file_path);
}
+ else
+ {
+ const gchar *command;
+
+ command = mnb_filter_get_text (MNB_FILTER (actor));
+ if (command)
+ {
+ g_signal_emit (self,
+ _signals[COMMANDLINE_LAUNCH_ACTIVATED],
+ 0,
+ command);
+ }
+ }
}
else if (CLUTTER_Escape == key_event->keyval)
{
@@ -1078,6 +1045,30 @@
return FALSE;
}
+static void
+_fav_add_complete_cb (ClutterActor *grid,
+ ClutterActor *button,
+ MnbLauncher *self)
+{
+ MnbLauncherPrivate *priv = GET_PRIVATE (MNB_LAUNCHER (self));
+ priv->fav_grid_items++;
+
+ if (CLUTTER_ACTOR_IS_VISIBLE (priv->placeholder_label))
+ clutter_actor_hide (priv->placeholder_label);
+}
+
+static void
+_fav_remove_complete_cb (ClutterActor *grid,
+ ClutterActor *button,
+ MnbLauncher *self)
+{
+ MnbLauncherPrivate *priv = GET_PRIVATE (MNB_LAUNCHER (self));
+ priv->fav_grid_items--;
+
+ if (priv->fav_grid_items == 0)
+ clutter_actor_show (priv->placeholder_label);
+}
+
static GObject *
_constructor (GType gtype,
guint n_properties,
@@ -1115,6 +1106,15 @@
clutter_actor_set_width (pane, FAV_PANE_WIDTH);
clutter_container_add_actor (CLUTTER_CONTAINER (columns), pane);
+
+ priv->placeholder_label = mx_label_new_with_text (PLACEHOLDER_TEXT);
+ mx_stylable_set_style_class (MX_STYLABLE (priv->placeholder_label),
+ "placeholder");
+
+ mx_label_set_line_wrap (MX_LABEL (priv->placeholder_label), TRUE);
+
+ mx_box_layout_add_actor (MX_BOX_LAYOUT (pane), priv->placeholder_label, 1);
+
fav_scroll = mx_scroll_view_new ();
clutter_actor_set_name (fav_scroll, "fav-pane-content");
g_object_set (fav_scroll, "clip-to-allocation", TRUE, NULL);
@@ -1131,6 +1131,13 @@
mx_stylable_set_style_class (MX_STYLABLE (priv->fav_grid), "fav-grid");
// mx_grid_set_column_spacing (MX_GRID (priv->fav_grid), APPS_GRID_COLUMN_GAP);
mx_grid_set_row_spacing (MX_GRID (priv->fav_grid), APPS_GRID_ROW_GAP);
+
+ g_signal_connect (priv->fav_grid, "actor-added",
+ G_CALLBACK (_fav_add_complete_cb), self);
+
+ g_signal_connect (priv->fav_grid, "actor-removed",
+ G_CALLBACK (_fav_remove_complete_cb), self);
+
// mx_grid_set_max_stride (MX_GRID (priv->fav_grid), 4);
clutter_container_add_actor (CLUTTER_CONTAINER (fav_scroll), priv->fav_grid);
@@ -1226,7 +1233,6 @@
mnb_launcher_class_init (MnbLauncherClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
g_type_class_add_private (klass, sizeof (MnbLauncherPrivate));
@@ -1235,8 +1241,6 @@
object_class->set_property = _set_property;
object_class->get_property = _get_property;
- actor_class->key_focus_in = _key_focus_in;
-
/* Properties */
g_object_class_install_property (object_class,
@@ -1258,6 +1262,16 @@
NULL, NULL,
g_cclosure_marshal_VOID__STRING,
G_TYPE_NONE, 1, G_TYPE_STRING);
+
+ _signals[COMMANDLINE_LAUNCH_ACTIVATED] =
+ g_signal_new ("commandline-launch-activated",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (MnbLauncherClass,
+ commandline_launcher_activated),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__STRING,
+ G_TYPE_NONE, 1, G_TYPE_STRING);
}
static void
--- src/meego-netbook-launcher.h
+++ src/meego-netbook-launcher.h
@@ -66,6 +66,8 @@
/* Signals. */
void (* launcher_activated) (MnbLauncher *self,
const gchar *desktop_file);
+ void (* commandline_launcher_activated) (MnbLauncher *self,
+ const gchar *commandline);
};
GType mnb_launcher_get_type (void) G_GNUC_CONST;
--- src/meego-panel-applications.c
+++ src/meego-panel-applications.c
@@ -97,6 +97,18 @@
}
static void
+commandline_launch_activated_cb (MnbLauncher *launcher,
+ const gchar *commandline,
+ MplPanelClient *panel)
+{
+ if (commandline)
+ {
+ if (mpl_panel_client_launch_application (panel, commandline))
+ mpl_panel_client_hide (panel);
+ }
+}
+
+static void
standalone_launcher_activated_cb (MnbLauncher *launcher,
const gchar *desktop_file,
gpointer user_data)
@@ -129,7 +141,7 @@
panel_show_end_cb (MplPanelClient *panel,
MnbLauncher *launcher)
{
- clutter_actor_grab_key_focus (CLUTTER_ACTOR (launcher));
+ mx_focusable_accept_focus (MX_FOCUSABLE (launcher), MX_FOCUS_HINT_LAST);
}
static void
@@ -235,7 +247,6 @@
G_CALLBACK (stage_height_notify_cb), launcher);
clutter_actor_show (stage);
- clutter_actor_grab_key_focus (launcher);
} else {
@@ -256,6 +267,8 @@
launcher = mnb_launcher_new ();
g_signal_connect (launcher, "launcher-activated",
G_CALLBACK (launcher_activated_cb), panel);
+ g_signal_connect (launcher, "commandline-launch-activated",
+ G_CALLBACK (commandline_launch_activated_cb), panel);
g_signal_connect (panel, "show-begin",
G_CALLBACK (panel_show_begin_cb), launcher);
@@ -271,6 +284,11 @@
G_CALLBACK (panel_set_size_cb), launcher);
}
+ mx_focus_manager_get_for_stage (CLUTTER_STAGE (stage));
+
+ /* The last item in the launcher is the filter entry */
+ mx_focusable_accept_focus (MX_FOCUSABLE (launcher), MX_FOCUS_HINT_LAST);
+
clutter_main ();
return EXIT_SUCCESS;
--- src/mnb-entry.c
+++ src/mnb-entry.c
-
-/*
- * Copyright (c) 2009 Intel Corp.
- *
- * Author: Robert Staudinger <robertx.staudinger at intel.com>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms and conditions of the GNU Lesser General Public License,
- * version 2.1, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope it will be useful, but WITHOUT ANY
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
- * more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#include <mx/mx.h>
-#include "mnb-entry.h"
-
-G_DEFINE_TYPE (MnbEntry, mnb_entry, MPL_TYPE_ENTRY)
-
-#define GET_PRIVATE(o) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((o), MNB_TYPE_ENTRY, MnbEntryPrivate))
-
-enum
-{
- PROP_0,
-
- PROP_HAS_KEYBOARD_FOCUS
-};
-
-enum
-{
- KEYNAV_EVENT,
-
- LAST_SIGNAL
-};
-
-typedef struct {
- gboolean has_keyboard_focus;
-} MnbEntryPrivate;
-
-static guint _signals[LAST_SIGNAL] = { 0, };
-
-/*
- * MnbEntry
- */
-
-static gboolean
-_text_key_press_cb (ClutterActor *actor,
- ClutterKeyEvent *event,
- MplEntry *entry)
-{
- /* Some of the keys are swallowed, i.e. they don't move the
- * focus away from the entry. */
- switch (event->keyval)
- {
- case CLUTTER_Return:
- /* case CLUTTER_Left: */
- /* case CLUTTER_Up: */
- case CLUTTER_Down:
- /* case CLUTTER_Page_Up: */
- case CLUTTER_Page_Down:
- case CLUTTER_Tab:
- g_signal_emit (entry, _signals[KEYNAV_EVENT], 0, event->keyval);
- return TRUE;
- case CLUTTER_Right:
- if (-1 == clutter_text_get_cursor_position (CLUTTER_TEXT (actor)))
- {
- g_signal_emit (entry, _signals[KEYNAV_EVENT], 0, event->keyval);
- return TRUE;
- }
- break;
- default:
- ;
- }
-
- return FALSE;
-}
-
-static void
-_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- switch (property_id)
- {
- case PROP_HAS_KEYBOARD_FOCUS:
- g_value_set_boolean (value,
- mnb_entry_get_has_keyboard_focus (MNB_ENTRY (object)));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-}
-
-static void
-_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- switch (property_id) {
- case PROP_HAS_KEYBOARD_FOCUS:
- mnb_entry_set_has_keyboard_focus (MNB_ENTRY (object),
- g_value_get_boolean (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-}
-
-static gboolean
-_captured_event (ClutterActor *actor,
- ClutterEvent *event)
-{
- MnbEntryPrivate *priv = GET_PRIVATE (actor);
-
- /* Swallow keyboard events while navigating outside the widget. */
- if (CLUTTER_KEY_PRESS == event->type &&
- !priv->has_keyboard_focus)
- {
- ClutterKeyEvent *key_event = (ClutterKeyEvent *) event;
-
- switch (key_event->keyval)
- {
- case CLUTTER_Return:
- case CLUTTER_Left:
- case CLUTTER_Up:
- case CLUTTER_Right:
- case CLUTTER_Down:
- case CLUTTER_Page_Up:
- case CLUTTER_Page_Down:
- case CLUTTER_Tab:
- g_signal_emit (actor, _signals[KEYNAV_EVENT], 0, key_event->keyval);
- return TRUE;
- default:
- ;
- }
- }
-
- return FALSE;
-}
-
-static void
-mnb_entry_class_init (MnbEntryClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
-
- g_type_class_add_private (klass, sizeof (MnbEntryPrivate));
-
- object_class->get_property = _get_property;
- object_class->set_property = _set_property;
-
- actor_class->captured_event = _captured_event;
-
- /* Properties */
-
- g_object_class_install_property (object_class,
- PROP_HAS_KEYBOARD_FOCUS,
- g_param_spec_boolean ("has-keyboard-focus",
- "Keyboard focus",
- "If the widget has keyboard focus",
- FALSE,
- G_PARAM_READWRITE));
-
- /* Signals */
-
- _signals[KEYNAV_EVENT] = g_signal_new ("keynav-event",
- G_TYPE_FROM_CLASS (object_class),
- G_SIGNAL_RUN_LAST,
- 0, NULL, NULL,
- g_cclosure_marshal_VOID__UINT,
- G_TYPE_NONE, 1, G_TYPE_UINT);
-}
-
-static void
-mnb_entry_init (MnbEntry *self)
-{
- MxWidget *entry;
- ClutterActor *text;
-
- entry = mpl_entry_get_mx_entry (MPL_ENTRY (self));
- text = mx_entry_get_clutter_text (MX_ENTRY (entry));
- g_signal_connect (text, "key-press-event",
- G_CALLBACK (_text_key_press_cb),
- self);
-}
-
-ClutterActor *
-mnb_entry_new (const char *label)
-{
- return g_object_new (MNB_TYPE_ENTRY,
- "label", label,
- NULL);
-}
-
-gboolean
-mnb_entry_get_has_keyboard_focus (MnbEntry *self)
-{
- MnbEntryPrivate *priv = GET_PRIVATE (self);
-
- g_return_val_if_fail (MNB_IS_ENTRY (self), FALSE);
-
- return priv->has_keyboard_focus;
-}
-
-void
-mnb_entry_set_has_keyboard_focus (MnbEntry *self,
- gboolean keyboard_focus)
-{
- MnbEntryPrivate *priv = GET_PRIVATE (self);
-
- g_return_if_fail (MNB_IS_ENTRY (self));
-
- if (keyboard_focus != priv->has_keyboard_focus)
- {
- MxEntry *entry = (MxEntry *) mpl_entry_get_mx_entry (MPL_ENTRY (self));
- ClutterText *text = (ClutterText *) mx_entry_get_clutter_text (entry);
-
- priv->has_keyboard_focus = keyboard_focus;
- g_object_notify (G_OBJECT (self), "has-keyboard-focus");
-
- if (priv->has_keyboard_focus)
- {
- clutter_text_set_selection (text, 0, -1);
- clutter_text_set_cursor_visible (text, TRUE);
- } else {
- gint pos = clutter_text_get_cursor_position (text);
- clutter_text_set_selection_bound (text, pos);
- clutter_text_set_cursor_visible (text, FALSE);
- }
- }
-}
-
--- src/mnb-entry.h
+++ src/mnb-entry.h
-
-/*
- * Copyright (c) 2009 Intel Corp.
- *
- * Author: Robert Staudinger <robertx.staudinger at intel.com>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms and conditions of the GNU Lesser General Public License,
- * version 2.1, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope it will be useful, but WITHOUT ANY
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
- * more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#ifndef MNB_ENTRY_H
-#define MNB_ENTRY_H
-
-#include <glib-object.h>
-#include <meego-panel/mpl-entry.h>
-
-G_BEGIN_DECLS
-
-#define MNB_TYPE_ENTRY mnb_entry_get_type()
-
-#define MNB_ENTRY(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST ((obj), MNB_TYPE_ENTRY, MnbEntry))
-
-#define MNB_ENTRY_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST ((klass), MNB_TYPE_ENTRY, MnbEntryClass))
-
-#define MNB_IS_ENTRY(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MNB_TYPE_ENTRY))
-
-#define MNB_IS_ENTRY_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), MNB_TYPE_ENTRY))
-
-#define MNB_ENTRY_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), MNB_TYPE_ENTRY, MnbEntryClass))
-
-typedef struct
-{
- MplEntry parent;
-} MnbEntry;
-
-typedef struct
-{
- MplEntryClass parent_class;
-} MnbEntryClass;
-
-GType mnb_entry_get_type (void);
-
-ClutterActor * mnb_entry_new (const char *label);
-
-gboolean mnb_entry_get_has_keyboard_focus (MnbEntry *self);
-void mnb_entry_set_has_keyboard_focus (MnbEntry *self,
- gboolean keyboard_focus);
-
-G_END_DECLS
-
-#endif /* MNB_ENTRY_H */
-
--- src/mnb-filter.c
+++ src/mnb-filter.c
@@ -147,6 +147,9 @@
priv->entry = (MxEntry *) mx_entry_new ();
mx_entry_set_secondary_icon_from_file (priv->entry,
THEMEDIR"/clear-entry.png");
+ mx_entry_set_secondary_icon_tooltip_text (priv->entry, _("Clear"));
+ mx_entry_set_icon_highlight_suffix (priv->entry, "-hover");
+
g_signal_connect (priv->entry, "notify::text",
G_CALLBACK (_entry_text_notify_cb), self);
g_signal_connect (priv->entry, "secondary-icon-clicked",
@@ -159,6 +162,10 @@
NULL);
button = mx_button_new_with_label (_("Search"));
+ /* This button is a visual guide only and does not perform any other
+ * function. Disabled to stop focus.
+ */
+ mx_widget_set_disabled (MX_WIDGET(button), TRUE);
clutter_container_add_actor (CLUTTER_CONTAINER (self), button);
}
--- src/mnb-launcher-button.c
+++ src/mnb-launcher-button.c
@@ -30,6 +30,12 @@
#include <mx/mx.h>
#include "mnb-launcher-button.h"
+static void mx_focusable_iface_init (MxFocusableIface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (MnbLauncherButton, mnb_launcher_button, MX_TYPE_TABLE,
+ G_IMPLEMENT_INTERFACE (MX_TYPE_FOCUSABLE,
+ mx_focusable_iface_init))
+
#define MNB_LAUNCHER_BUTTON_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), MNB_TYPE_LAUNCHER_BUTTON, MnbLauncherButtonPrivate))
@@ -42,7 +48,6 @@
enum
{
- HOVERED,
ACTIVATED,
FAV_TOGGLED,
@@ -71,6 +76,7 @@
char *title_key;
char *description_key;
char *comment_key;
+ char *executable_key;
/* Those are mutually exclusive.
* fav_sibling: sibling in the fav pane.
@@ -81,7 +87,16 @@
static guint _signals[LAST_SIGNAL] = { 0, };
-G_DEFINE_TYPE (MnbLauncherButton, mnb_launcher_button, MX_TYPE_TABLE);
+static MxFocusable *
+mnb_launcher_button_accept_focus (MxFocusable *focusable,
+ MxFocusHint hint)
+{
+ clutter_ungrab_pointer ();
+ clutter_actor_grab_key_focus (CLUTTER_ACTOR (focusable));
+ mx_stylable_set_style_pseudo_class (MX_STYLABLE (focusable), "hover");
+
+ return focusable;
+}
static void
fav_button_notify_toggled_cb (MxButton *button,
@@ -154,6 +169,7 @@
g_free (self->priv->category_key);
g_free (self->priv->title_key);
g_free (self->priv->description_key);
+ g_free (self->priv->executable_key);
G_OBJECT_CLASS (mnb_launcher_button_parent_class)->finalize (object);
}
@@ -198,20 +214,56 @@
return FALSE;
}
+/* probably not really needed but making sure the is_pressed state is
+ * consistent
+ */
static gboolean
-_enter_event_cb (ClutterActor *actor,
- ClutterCrossingEvent *event,
- gpointer data)
+mnb_launcher_button_key_press_event (ClutterActor *actor,
+ ClutterKeyEvent *event)
{
- MnbLauncherButton *self = MNB_LAUNCHER_BUTTON (actor);
+ if (event->keyval == CLUTTER_KEY_Return ||
+ event->keyval == CLUTTER_KEY_KP_Enter ||
+ event->keyval == CLUTTER_KEY_ISO_Enter)
+ {
+ MnbLauncherButton *self = MNB_LAUNCHER_BUTTON (actor);
+
+ self->priv->is_pressed = TRUE;
+ clutter_actor_grab_key_focus (actor);
+ return TRUE;
+ }
+
+ return FALSE;
+}
- g_signal_emit (self, _signals[HOVERED], 0);
+static gboolean
+mnb_launcher_button_key_release_event (ClutterActor *actor,
+ ClutterKeyEvent *event)
+{
+ if (event->keyval == CLUTTER_KEY_Return ||
+ event->keyval == CLUTTER_KEY_KP_Enter ||
+ event->keyval == CLUTTER_KEY_ISO_Enter)
+ {
+ MnbLauncherButton *self = MNB_LAUNCHER_BUTTON (actor);
- mx_stylable_set_style_pseudo_class (MX_STYLABLE (self), "hover");
+ if (!self->priv->is_pressed)
+ return FALSE;
+
+ clutter_ungrab_keyboard ();
+ self->priv->is_pressed = FALSE;
+ g_signal_emit (self, _signals[ACTIVATED], 0);
+
+ mx_stylable_set_style_pseudo_class (MX_STYLABLE (self), NULL);
+ mx_widget_hide_tooltip (MX_WIDGET (self));
+
+ return TRUE;
+ }
return FALSE;
}
+/* Accept focus handles setting hover pseudo style class and leave events
+ * handle unsetting the hover pseudo style class
+ */
static gboolean
_leave_event_cb (ClutterActor *actor,
ClutterCrossingEvent *event,
@@ -224,12 +276,23 @@
if (self->priv->is_pressed)
{
clutter_ungrab_pointer ();
+ clutter_ungrab_keyboard ();
self->priv->is_pressed = FALSE;
}
return FALSE;
}
+static gboolean
+_enter_event_cb (ClutterActor *actor,
+ ClutterCrossingEvent *event,
+ gpointer data)
+{
+ mx_focusable_accept_focus (MX_FOCUSABLE (actor), MX_FOCUS_HINT_FIRST);
+
+ return FALSE;
+}
+
static void
mnb_launcher_button_allocate (ClutterActor *actor,
const ClutterActorBox *box,
@@ -276,6 +339,12 @@
}
static void
+mx_focusable_iface_init (MxFocusableIface *iface)
+{
+ iface->accept_focus = mnb_launcher_button_accept_focus;
+}
+
+static void
mnb_launcher_button_class_init (MnbLauncherButtonClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
@@ -287,18 +356,13 @@
actor_class->button_press_event = mnb_launcher_button_button_press_event;
actor_class->button_release_event = mnb_launcher_button_button_release_event;
+ actor_class->key_press_event = mnb_launcher_button_key_press_event;
+ actor_class->key_release_event = mnb_launcher_button_key_release_event;
actor_class->allocate = mnb_launcher_button_allocate;
actor_class->allocate = mnb_launcher_button_allocate;
actor_class->pick = mnb_launcher_button_pick;
actor_class->paint = mnb_launcher_button_paint;
- _signals[HOVERED] = g_signal_new ("hovered",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (MnbLauncherButtonClass, hovered),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
_signals[ACTIVATED] = g_signal_new ("activated",
G_TYPE_FROM_CLASS (klass),
@@ -318,17 +382,6 @@
}
static void
-_mapped_notify_cb (MnbLauncherButton *self,
- GParamSpec *pspec,
- gpointer user_data)
-{
- if (!CLUTTER_ACTOR_IS_MAPPED (self))
- {
- mx_stylable_set_style_pseudo_class (MX_STYLABLE (self), NULL);
- }
-}
-
-static void
mnb_launcher_button_init (MnbLauncherButton *self)
{
ClutterActor *label;
@@ -337,14 +390,13 @@
mx_table_set_column_spacing (MX_TABLE (self), COL_SPACING);
- g_signal_connect (self, "enter-event",
- G_CALLBACK (_enter_event_cb), NULL);
g_signal_connect (self, "leave-event",
G_CALLBACK (_leave_event_cb), NULL);
- g_signal_connect (self, "notify::mapped",
- G_CALLBACK (_mapped_notify_cb), NULL);
+ g_signal_connect (self, "key-focus-out",
+ G_CALLBACK (_leave_event_cb), NULL);
+ g_signal_connect (self, "enter-event",
+ G_CALLBACK (_enter_event_cb), NULL);
- /* icon */
self->priv->icon = NULL;
/* "app" label */
@@ -673,6 +725,16 @@
return TRUE;
}
+ /* Executable. */
+ if (self->priv->executable && !self->priv->executable_key)
+ self->priv->executable_key = g_utf8_strdown (self->priv->executable, -1);
+
+ if (self->priv->executable_key &&
+ NULL != strstr (self->priv->executable_key, lcase_needle))
+ {
+ return TRUE;
+ }
+
return FALSE;
}
@@ -703,6 +765,9 @@
gfloat width,
gfloat height)
{
+ mx_widget_set_tooltip_text (MX_WIDGET (self),
+ mx_label_get_text (self->priv->title));
+
clutter_actor_destroy ((ClutterActor *) self->priv->title);
self->priv->title = NULL;
clutter_actor_destroy ((ClutterActor *) self->priv->launched);
--- src/mnb-launcher-grid.c
+++ src/mnb-launcher-grid.c
@@ -20,8 +20,14 @@
*/
#include "mnb-launcher-grid.h"
+#include "mnb-expander.h"
+
+static void mx_focusable_iface_init (MxFocusableIface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (MnbLauncherGrid, mnb_launcher_grid, MX_TYPE_GRID,
+ G_IMPLEMENT_INTERFACE (MX_TYPE_FOCUSABLE,
+ mx_focusable_iface_init))
-G_DEFINE_TYPE (MnbLauncherGrid, mnb_launcher_grid, MX_TYPE_GRID)
#define GET_PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), MNB_TYPE_LAUNCHER_GRID, MnbLauncherGridPrivate))
@@ -149,54 +155,15 @@
return g_object_new (MNB_TYPE_LAUNCHER_GRID, NULL);
}
-typedef struct
-{
- const gchar *pseudo_class;
- MxWidget *widget;
-} find_widget_by_pseudo_class_data;
-
-static void
-_find_widget_by_pseudo_class_cb (ClutterActor *actor,
- find_widget_by_pseudo_class_data *data)
-{
- const gchar *pseudo_class;
-
- if (!CLUTTER_ACTOR_IS_MAPPED (actor))
- return;
-
- if (!MX_IS_STYLABLE (actor))
- return;
-
- pseudo_class = mx_stylable_get_style_pseudo_class (MX_STYLABLE (actor));
- if (0 == g_strcmp0 (data->pseudo_class, pseudo_class))
- data->widget = MX_WIDGET (actor);
-}
-
-MxWidget *
-mnb_launcher_grid_find_widget_by_pseudo_class (MnbLauncherGrid *grid,
- const gchar *pseudo_class)
-{
- find_widget_by_pseudo_class_data data;
-
- data.pseudo_class = pseudo_class;
- data.widget = NULL;
-
- clutter_container_foreach (CLUTTER_CONTAINER (grid),
- (ClutterCallback) _find_widget_by_pseudo_class_cb,
- &data);
-
- return data.widget;
-}
-
typedef struct {
gfloat x;
gfloat y;
- MxWidget *widget;
-} find_widget_by_point_data_t;
+ ClutterActor *actor;
+} find_actor_by_point_data_t;
static void
-_find_widget_by_point_cb (ClutterActor *actor,
- find_widget_by_point_data_t *data)
+_find_actor_by_point_cb (ClutterActor *actor,
+ find_actor_by_point_data_t *data)
{
gfloat left = clutter_actor_get_x (actor);
gfloat top = clutter_actor_get_y (actor);
@@ -209,266 +176,285 @@
right >= data->x &&
bottom >= data->y)
{
- data->widget = MX_WIDGET (actor);
+ data->actor = actor;
}
}
-MxWidget *
-mnb_launcher_grid_find_widget_by_point (MnbLauncherGrid *self,
- gfloat x,
- gfloat y)
+static ClutterActor *
+mnb_launcher_grid_find_actor_by_point (MnbLauncherGrid *self,
+ gfloat x,
+ gfloat y)
{
- find_widget_by_point_data_t data;
+ find_actor_by_point_data_t data;
data.x = x;
data.y = y;
- data.widget = NULL;
+ data.actor = NULL;
clutter_container_foreach (CLUTTER_CONTAINER (self),
- (ClutterCallback) _find_widget_by_point_cb,
+ (ClutterCallback) _find_actor_by_point_cb,
&data);
- return data.widget;
+ return data.actor;
}
-MxWidget *
-mnb_launcher_grid_keynav_up (MnbLauncherGrid *self)
+static ClutterActor *
+mnb_launcher_grid_keynav_wrap_up (MnbLauncherGrid *self, ClutterActor *old)
{
- MxWidget *old, *new;
+ ClutterActor *new = NULL;
+ MxPadding padding;
gfloat x, y;
- old = mnb_launcher_grid_find_widget_by_pseudo_class (self, "hover");
if (old == NULL)
return NULL;
- x = clutter_actor_get_x (CLUTTER_ACTOR (old)) +
+ mx_widget_get_padding (MX_WIDGET (self), &padding);
+
+ x = clutter_actor_get_width (CLUTTER_ACTOR (self)) -
+ padding.right -
clutter_actor_get_width (CLUTTER_ACTOR (old)) / 2;
y = clutter_actor_get_y (CLUTTER_ACTOR (old)) -
mx_grid_get_row_spacing (MX_GRID (self)) -
clutter_actor_get_height (CLUTTER_ACTOR (old)) / 2;
- new = mnb_launcher_grid_find_widget_by_point (self, x, y);
- if (new)
- {
- mx_stylable_set_style_pseudo_class (MX_STYLABLE (old), NULL);
- mx_stylable_set_style_pseudo_class (MX_STYLABLE (new), "hover");
- return new;
- }
+ new = mnb_launcher_grid_find_actor_by_point (self, x, y);
- return NULL;
+ return new;
}
-static MxWidget *
-mnb_launcher_grid_keynav_right (MnbLauncherGrid *self)
+static ClutterActor *
+mnb_launcher_grid_keynav_wrap_down (MnbLauncherGrid *self, ClutterActor *old)
{
- MxWidget *old, *new;
+ ClutterActor *new = NULL;
+ MxPadding padding;
gfloat x, y;
- old = mnb_launcher_grid_find_widget_by_pseudo_class (self, "hover");
if (old == NULL)
return NULL;
- x = clutter_actor_get_x (CLUTTER_ACTOR (old)) +
- mx_grid_get_column_spacing (MX_GRID (self)) +
- clutter_actor_get_width (CLUTTER_ACTOR (old)) * 1.5;
+ mx_widget_get_padding (MX_WIDGET (self), &padding);
+
+ x = padding.left +
+ clutter_actor_get_width (CLUTTER_ACTOR (old)) / 2;
y = clutter_actor_get_y (CLUTTER_ACTOR (old)) +
- clutter_actor_get_height (CLUTTER_ACTOR (old)) / 2;
+ mx_grid_get_row_spacing (MX_GRID (self)) +
+ clutter_actor_get_height (CLUTTER_ACTOR (old)) * 1.5;
- new = mnb_launcher_grid_find_widget_by_point (self, x, y);
- if (new)
- {
- mx_stylable_set_style_pseudo_class (MX_STYLABLE (old), NULL);
- mx_stylable_set_style_pseudo_class (MX_STYLABLE (new), "hover");
- return new;
- }
+ new = mnb_launcher_grid_find_actor_by_point (self, x, y);
- return NULL;
+ return new;
}
-MxWidget *
-mnb_launcher_grid_keynav_down (MnbLauncherGrid *self)
+static ClutterActor *
+mnb_launcher_grid_keynav_up (MnbLauncherGrid *self, ClutterActor *old)
{
- MxWidget *old, *new;
+ ClutterActor *new = NULL;
gfloat x, y;
- old = mnb_launcher_grid_find_widget_by_pseudo_class (self, "hover");
if (old == NULL)
return NULL;
x = clutter_actor_get_x (CLUTTER_ACTOR (old)) +
clutter_actor_get_width (CLUTTER_ACTOR (old)) / 2;
- y = clutter_actor_get_y (CLUTTER_ACTOR (old)) +
- mx_grid_get_row_spacing (MX_GRID (self)) +
- clutter_actor_get_height (CLUTTER_ACTOR (old)) * 1.5;
+ y = clutter_actor_get_y (CLUTTER_ACTOR (old)) -
+ mx_grid_get_row_spacing (MX_GRID (self)) -
+ clutter_actor_get_height (CLUTTER_ACTOR (old)) / 2;
- new = mnb_launcher_grid_find_widget_by_point (self, x, y);
- if (new)
- {
- mx_stylable_set_style_pseudo_class (MX_STYLABLE (old), NULL);
- mx_stylable_set_style_pseudo_class (MX_STYLABLE (new), "hover");
- return new;
- }
+ new = mnb_launcher_grid_find_actor_by_point (self, x, y);
- return NULL;
+ return new;
}
-static MxWidget *
-mnb_launcher_grid_keynav_left (MnbLauncherGrid *self)
+static ClutterActor *
+mnb_launcher_grid_keynav_down (MnbLauncherGrid *self, ClutterActor *old)
{
- MxWidget *old, *new;
+ ClutterActor *new = NULL;
gfloat x, y;
- old = mnb_launcher_grid_find_widget_by_pseudo_class (self, "hover");
if (old == NULL)
return NULL;
- x = clutter_actor_get_x (CLUTTER_ACTOR (old)) -
- mx_grid_get_column_spacing (MX_GRID (self)) -
+ x = clutter_actor_get_x (CLUTTER_ACTOR (old)) +
clutter_actor_get_width (CLUTTER_ACTOR (old)) / 2;
y = clutter_actor_get_y (CLUTTER_ACTOR (old)) +
- clutter_actor_get_height (CLUTTER_ACTOR (old)) / 2;
+ mx_grid_get_row_spacing (MX_GRID (self)) +
+ clutter_actor_get_height (CLUTTER_ACTOR (old)) * 1.5;
- new = mnb_launcher_grid_find_widget_by_point (self, x, y);
- if (new)
- {
- mx_stylable_set_style_pseudo_class (MX_STYLABLE (old), NULL);
- mx_stylable_set_style_pseudo_class (MX_STYLABLE (new), "hover");
- return new;
- }
+ new = mnb_launcher_grid_find_actor_by_point (self, x, y);
- return NULL;
+ return new;
}
-static MxWidget *
-mnb_launcher_grid_keynav_wrap_up (MnbLauncherGrid *self)
+static ClutterActor *
+_find_first_focusable (ClutterActor *self)
{
- MxWidget *old, *new;
- MxPadding padding;
- gfloat x, y;
-
- old = mnb_launcher_grid_find_widget_by_pseudo_class (self, "hover");
- if (old == NULL)
- return NULL;
+ GList *iter, *children = NULL;
+ ClutterActor *actor = NULL;
- mx_widget_get_padding (MX_WIDGET (self), &padding);
+ children = clutter_container_get_children (CLUTTER_CONTAINER (self));
- x = clutter_actor_get_width (CLUTTER_ACTOR (self)) -
- padding.right -
- clutter_actor_get_width (CLUTTER_ACTOR (old)) / 2;
-
- y = clutter_actor_get_y (CLUTTER_ACTOR (old)) -
- mx_grid_get_row_spacing (MX_GRID (self)) -
- clutter_actor_get_height (CLUTTER_ACTOR (old)) / 2;
-
- new = mnb_launcher_grid_find_widget_by_point (self, x, y);
- if (new)
+ if (children)
{
- mx_stylable_set_style_pseudo_class (MX_STYLABLE (old), NULL);
- mx_stylable_set_style_pseudo_class (MX_STYLABLE (new), "hover");
- return new;
+ for (iter = children; iter; iter = iter->next)
+ {
+ if (CLUTTER_ACTOR_IS_MAPPED (iter->data) &&
+ MX_IS_FOCUSABLE (iter->data))
+ {
+ actor = iter->data;
+ break;
+ }
+ }
+ g_list_free (children);
+ return actor;
}
-
return NULL;
}
-static MxWidget *
-mnb_launcher_grid_keynav_wrap_down (MnbLauncherGrid *self)
-{
- MxWidget *old, *new;
- MxPadding padding;
- gfloat x, y;
- old = mnb_launcher_grid_find_widget_by_pseudo_class (self, "hover");
- if (old == NULL)
- return NULL;
+static ClutterActor *
+_find_next_focusable (ClutterActor *self, ClutterActor *from)
+{
+ GList *iter, *list, *children = NULL;
+ ClutterActor *actor = NULL;
- mx_widget_get_padding (MX_WIDGET (self), &padding);
+ children =
+ clutter_container_get_children (CLUTTER_CONTAINER (self));
- x = padding.left +
- clutter_actor_get_width (CLUTTER_ACTOR (old)) / 2;
+ if (!children)
+ return NULL;
- y = clutter_actor_get_y (CLUTTER_ACTOR (old)) +
- mx_grid_get_row_spacing (MX_GRID (self)) +
- clutter_actor_get_height (CLUTTER_ACTOR (old)) * 1.5;
+ list = g_list_find (children, from);
+ list = g_list_next (list);
- new = mnb_launcher_grid_find_widget_by_point (self, x, y);
- if (new)
+ if (list)
{
- mx_stylable_set_style_pseudo_class (MX_STYLABLE (old), NULL);
- mx_stylable_set_style_pseudo_class (MX_STYLABLE (new), "hover");
- return new;
+ for (iter = list; iter; iter = iter->next)
+ {
+ if (CLUTTER_ACTOR_IS_MAPPED (iter->data) &&
+ MX_IS_FOCUSABLE (iter->data) &&
+ iter->data != from)
+ {
+ actor = iter->data;
+ break;
+ }
+ }
+ g_list_free (children);
}
-
- return NULL;
+ return actor;
}
-MxWidget *
-mnb_launcher_grid_keynav_first (MnbLauncherGrid *self)
+static ClutterActor *
+_find_previous_focusable (ClutterActor *self, ClutterActor *from)
{
- MxWidget *widget;
- MxPadding padding;
- gfloat x, y;
+ GList *iter, *list, *children = NULL;
+ ClutterActor *actor = NULL;
- mx_widget_get_padding (MX_WIDGET (self), &padding);
+ children =
+ clutter_container_get_children (CLUTTER_CONTAINER (self));
- x = padding.left + 1;
- y = padding.top + 1;
+ list = g_list_find (children, from);
+ list = g_list_previous (list);
- widget = mnb_launcher_grid_find_widget_by_point (self, x, y);
- if (widget)
+ if (list)
{
- mx_stylable_set_style_pseudo_class (MX_STYLABLE (widget), "hover");
- return widget;
+ for (iter = list; iter; iter = iter->prev)
+ {
+ if (CLUTTER_ACTOR_IS_MAPPED (iter->data) &&
+ MX_IS_FOCUSABLE (iter->data))
+ {
+ actor = iter->data;
+ break;
+ }
+ }
+ g_list_free (children);
}
-
- return NULL;
+ return actor;
}
-void
-mnb_launcher_grid_keynav_out (MnbLauncherGrid *self)
+static MxFocusable *
+mnb_launcher_grid_accept_focus (MxFocusable *focusable,
+ MxFocusHint hint)
{
- MxWidget *widget;
+ MxFocusable *focus;
- widget = mnb_launcher_grid_find_widget_by_pseudo_class (self, "hover");
- if (widget)
- mx_stylable_set_style_pseudo_class (MX_STYLABLE (widget), NULL);
+ focus = MX_FOCUSABLE (_find_first_focusable (CLUTTER_ACTOR (focusable)));
+ if (focus)
+ {
+ clutter_actor_grab_key_focus (CLUTTER_ACTOR (focusable));
+ return mx_focusable_accept_focus (focus, hint);
+ }
+
+ return focusable;
}
-MxWidget *
-mnb_launcher_grid_keynav (MnbLauncherGrid *self,
- guint keyval)
+static MxFocusable *
+mnb_launcher_grid_move_focus (MxFocusable *focusable,
+ MxFocusDirection direction,
+ MxFocusable *from)
{
- MxWidget *widget;
+ ClutterActor *focus = NULL;
- widget = NULL;
- switch (keyval)
+ switch (direction)
{
- case CLUTTER_Return:
- widget = mnb_launcher_grid_find_widget_by_pseudo_class (self, "hover");
- break;
- case CLUTTER_Left:
- widget = mnb_launcher_grid_keynav_left (self);
- if (!widget)
- widget = mnb_launcher_grid_keynav_wrap_up (self);
- break;
- case CLUTTER_Up:
- widget = mnb_launcher_grid_keynav_up (self);
- break;
- case CLUTTER_Right:
- widget = mnb_launcher_grid_keynav_right (self);
- if (!widget)
- widget = mnb_launcher_grid_keynav_wrap_down (self);
- break;
- case CLUTTER_Down:
- widget = mnb_launcher_grid_keynav_down (self);
- break;
- }
+ case MX_FOCUS_DIRECTION_UP:
+ focus = mnb_launcher_grid_keynav_up (MNB_LAUNCHER_GRID (focusable),
+ CLUTTER_ACTOR (from));
+ if (!focus)
+ focus =
+ mnb_launcher_grid_keynav_wrap_up (MNB_LAUNCHER_GRID (focusable),
+ CLUTTER_ACTOR (from));
+ break;
+ case MX_FOCUS_DIRECTION_DOWN:
+ focus = mnb_launcher_grid_keynav_down (MNB_LAUNCHER_GRID (focusable),
+ CLUTTER_ACTOR (from));
+ if (!focus)
+ focus =
+ mnb_launcher_grid_keynav_wrap_down (MNB_LAUNCHER_GRID (focusable),
+ CLUTTER_ACTOR (from));
+ break;
+ case MX_FOCUS_DIRECTION_LEFT:
+ case MX_FOCUS_DIRECTION_PREVIOUS:
+
+ focus = _find_previous_focusable (CLUTTER_ACTOR (focusable),
+ CLUTTER_ACTOR (from));
+ break;
+
+ case MX_FOCUS_DIRECTION_RIGHT:
+ case MX_FOCUS_DIRECTION_NEXT:
+ focus = _find_next_focusable (CLUTTER_ACTOR (focusable),
+ CLUTTER_ACTOR (from));
+ break;
+ default:
+ break;
+ }
+
+ if (focus)
+ {
+ ClutterActor *parent;
+ parent = clutter_actor_get_parent (CLUTTER_ACTOR (focusable));
+ if (MX_IS_SCROLL_VIEW (parent))
+ {
+ ClutterGeometry geo;
+ clutter_actor_get_geometry (focus, &geo);
+ mx_scroll_view_ensure_visible (MX_SCROLL_VIEW (parent),
+ &geo);
+ }
+
+ return mx_focusable_accept_focus (MX_FOCUSABLE (focus),
+ MX_FOCUS_HINT_FIRST);
+ }
+ return NULL;
+}
- return widget;
+static void
+mx_focusable_iface_init (MxFocusableIface *iface)
+{
+ iface->accept_focus = mnb_launcher_grid_accept_focus;
+ iface->move_focus = mnb_launcher_grid_move_focus;
}
gboolean
--- src/mnb-launcher-grid.h
+++ src/mnb-launcher-grid.h
@@ -62,19 +62,6 @@
MxWidget * mnb_launcher_grid_new (void);
-MxWidget * mnb_launcher_grid_keynav (MnbLauncherGrid *self,
- guint keyval);
-MxWidget * mnb_launcher_grid_keynav_up (MnbLauncherGrid *self);
-MxWidget * mnb_launcher_grid_keynav_down (MnbLauncherGrid *self);
-MxWidget * mnb_launcher_grid_keynav_first (MnbLauncherGrid *self);
-void mnb_launcher_grid_keynav_out (MnbLauncherGrid *self);
-
-MxWidget * mnb_launcher_grid_find_widget_by_point (MnbLauncherGrid *self,
- gfloat x,
- gfloat y);
-
-MxWidget * mnb_launcher_grid_find_widget_by_pseudo_class (MnbLauncherGrid *self,
- const gchar *pseudo_class);
gboolean mnb_launcher_grid_get_x_expand_children (MnbLauncherGrid *self);
++++++ meego-panel-applications.yaml
--- meego-panel-applications.yaml
+++ meego-panel-applications.yaml
@@ -1,7 +1,7 @@
Name: meego-panel-applications
Summary: Applications panel
Description: Meego applications panel
-Version: 0.2.6
+Version: 0.2.7
Release: 1
Group: System/Desktop
License: LGPL 2.1
More information about the MeeGo-commits
mailing list