diff --git a/calendar/inc/class.calendar_ui.inc.php b/calendar/inc/class.calendar_ui.inc.php
index a3afa5b2f7..c98ccad421 100644
--- a/calendar/inc/class.calendar_ui.inc.php
+++ b/calendar/inc/class.calendar_ui.inc.php
@@ -696,10 +696,43 @@ class calendar_ui
{
$baseurl = egw::link('/index.php',array('menuaction'=>'calendar.calendar_uiviews.index'),false);
}
+
// Category Selection
- $file[++$n] = $this->_select_box('Category','cat_id',
- ''.
- $this->categories->formatted_list('select','all',$this->cat_id,'True'),$baseurl ? $baseurl.'&cat_id=' : '');
+ $onchange = "var value = '';
+ if(selectBox = document.getElementById('cat_id')) {
+ for(i=0; i < selectBox.length; ++i) {
+ if (selectBox.options[i].selected) {
+ value += (value ? ',' : '') + selectBox.options[i].value;
+ }
+ }
+ }";
+ if ($baseurl) // we append the value to the baseurl
+ {
+ $cat_baseurl = $baseurl ? $baseurl.'&cat_id=' : '';
+ if (substr($cat_baseurl,-1) != '=') $cat_baseurl .= strpos($cat_baseurl,'?') === False ? '?' : '&';
+ $onchange.="egw_appWindow('calendar').location='$cat_baseurl'+value;";
+ }
+ else // we add $name=value to the actual location
+ {
+ $onchange.="var win=egw_appWindow('calendar'); win.location=win.location+(win.location.search.length ? '&' : '?')+'cat_id='+value;";
+ }
+
+ $cat_id = explode(',',$this->cat_id);
+ $options = ''.
+ $this->categories->formatted_list('select','all',$cat_id,'True');
+ $icon_onclick = "if(selectBox = document.getElementById('cat_id')) {
+ if (!selectBox.multiple) {selectBox.size=4; selectBox.multiple=true;}}";
+
+ $select = ' \n" . html::image('phpgwapi','attach','','onclick="'.$icon_onclick.'"');
+
+ $file[++$n] = array(
+ 'text' => $select,
+ 'no_lang' => True,
+ 'link' => False
+ );
+
// Filter all or hideprivate
$options = '';
diff --git a/calendar/inc/class.calendar_uiviews.inc.php b/calendar/inc/class.calendar_uiviews.inc.php
index d79d03875e..ba590d2e3a 100644
--- a/calendar/inc/class.calendar_uiviews.inc.php
+++ b/calendar/inc/class.calendar_uiviews.inc.php
@@ -162,7 +162,7 @@ class calendar_uiviews extends calendar_ui
$this->owner = str_replace('%2C',',',$this->owner);
$this->search_params = array(
'start' => $this->date,
- 'cat_id' => $this->cat_id,
+ 'cat_id' => explode(',',$this->cat_id),
'users' => explode(',',$this->owner),
'filter' => $this->filter,
'daywise' => True,